TS 自定义结构Long与number类型相互转换

简介: TS 自定义结构Long与number类型相互转换


TS 自定义结构Long 如下:

export interface Long {
/** Low bits */
low: number;
/** High bits */
high: number;
/** Whether unsigned or not */
unsigned: boolean;
} 
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11


根据给定的 Long 接口定义,我们可以实现 Long 类型number 类型之间的相互转换函数


首先,我们可以编写一个将 Long 转换为 number 的函数:

function longToNumber(longValue: Long): number {
  const { low, high, unsigned } = longValue;
  if (unsigned) {
    return (high >>> 0) * 4294967296 + (low >>> 0);
  } else {
    return high * 4294967296 + (low >>> 0);
  }
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9


上述函数 longToNumber 接受一个 Long 类型的参数 longValue,并根据 unsigned 属性的值,将其转换为相应的 number 类型。如果 unsignedtrue,我们使用无符号右移操作符 >>> 将低位和高位进行组合;如果 unsignedfalse,我们直接将低位和高位进行组合。


接下来,我们可以编写一个将 number 转换为 Long 的函数:

function numberToLong(numberValue: number): Long {
  const low = numberValue >>> 0;
  const high = Math.floor(numberValue / 4294967296);
  return {
    low,
    high,
    unsigned: numberValue < 0 ? true : false,
  };
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10


函数 numberToLong 接受一个 number 类型的参数 numberValue,并根据其值计算出低位和高位。我们使用无符号右移操作符 >>> 取得低位,使用 Math.floor 和除法运算计算出高位。根据 numberValue 的正负值,我们设置 unsigned 属性为相应的布尔值。


现在,我们可以使用上述函数进行 Long 类型和 number 类型之间的相互转换。

const longValue: Long = {
  low: 1234567890,
  high: 0,
  unsigned: false,
};
const numberValue = longToNumber(longValue);
console.log(numberValue); // 输出: 1234567890
const newLongValue = numberToLong(numberValue);
console.log(newLongValue); // 输出: { low: 1234567890, high: 0, unsigned: false }
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11


在上述示例中,我们首先定义了一个 Long 类型的值 longValue,然后使用 longToNumber 函数将其转换为 number 类型的值 numberValue。接着,我们使用 numberToLong 函数将 numberValue 转换回 Long 类型,并将结果存储在 newLongValue 中。

最后,我们分别打印了 numberValuenewLongValue 的值,验证了转换的准确性。


学习交流合作加好友

微信名片

 

显示推荐内容

欢迎使用 CSDNGreener,绿化设定按钮在这里!

好的,以后不再提示我

目录
相关文章
TS,数据类型概述,常见的基本数据类型有number/string/boolean/undefined/null,字符串用““,let food: string = ‘糖葫芦‘,布尔类型
TS,数据类型概述,常见的基本数据类型有number/string/boolean/undefined/null,字符串用““,let food: string = ‘糖葫芦‘,布尔类型
TS定义布尔值,let flag:boolean = true,定义数字类型 let a1:number = 10,赋值 let str1:string = ‘‘,打印c~.log($(str1))
TS定义布尔值,let flag:boolean = true,定义数字类型 let a1:number = 10,赋值 let str1:string = ‘‘,打印c~.log($(str1))
|
6月前
|
JavaScript
|
7月前
|
存储
TS 自定义结构Long与number类型相互转换
TS 自定义结构Long与number类型相互转换
260 0
|
JavaScript 前端开发
ts -函数的类型
在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)和函数表达式(Function Expression)
|
JavaScript
ES6对String字符串、Array数组、Number数字、Object对象 类型做了哪些升级优化
ES6对String字符串、Array数组、Number数字、Object对象 类型做了哪些升级优化
112 0
【TS】函数和函数类型
【TS】函数和函数类型
82 0
|
存储 JavaScript
【TS】object类型
【TS】object类型
89 0
|
索引
Ts中string、number和any等类型 不能当做索引用,怎么处理?
Ts中string、number和any等类型 不能当做索引用,怎么处理?
379 0
|
JavaScript 索引
ts扩展类型
接口 interface 含义:是指对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员
ts扩展类型