Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于将8字节(u64)无符号整数转换为javascript的建议_Javascript - Fatal编程技术网

关于将8字节(u64)无符号整数转换为javascript的建议

关于将8字节(u64)无符号整数转换为javascript的建议,javascript,Javascript,我有一个u64(无符号整数)存储在8字节的内存中。很明显,范围是0-2^64个整数 通过将每个字节转换为十六进制并生成十六进制字符串,我将其转换为javascript数字: let s = '0x' s += buffer.slice(0,1).toString("hex") s += buffer.slice(1,2).toString("hex") ... n = parseInt(s) 到目前为止,我所做的一切都很好 但当我看到javascript

我有一个u64(无符号整数)存储在8字节的内存中。很明显,范围是0-2^64个整数

通过将每个字节转换为十六进制并生成十六进制字符串,我将其转换为javascript数字:

let s = '0x'
s += buffer.slice(0,1).toString("hex")
s += buffer.slice(1,2).toString("hex")
...
n = parseInt(s)
到目前为止,我所做的一切都很好

但当我看到javascript如何存储数字时,我变得不确定了。Javascript对数字使用8个字节,但对所有数字的处理都相同。这个内部javascript“数字”表示也可以包含浮点数

javascript数字可以存储0到2^64之间的所有整数吗?似乎不是

我什么时候会遇到麻烦?
人们如何绕过这个问题?

无符号64位整数的范围为0到18.446.744.073.709.551.615

您可以将数字包装器对象与.MAX_VALUE属性一起使用,它表示JavaScript中可表示的最大数值

JavaScript数字类型是双精度64位二进制格式IEEE 754值,类似于Java或C#中的双精度

一般信息:

JS中的整数:

JavaScript只有浮点数。整数在内部以两种方式出现。首先,大多数JavaScript引擎将一个足够小的数字(没有小数点)存储为整数(例如,31位),并尽可能长时间地保持该表示形式。如果一个数字的大小变得太大或出现小数点,它们必须切换回浮点表示。 其次,ECMAScript规范具有整数运算符:即所有按位运算符。这些运算符将其操作数转换为32位整数并返回32位整数。对于规范,整数只表示数字没有小数,32位表示它们在一定范围内。对于引擎,32位整数意味着通常可以引入或维护实际整数(非浮点)表示

整数范围

在JavaScript内部,以下整数范围很重要:

  • 安全整数[1],JavaScript支持的最大实际可用整数范围: 53位加一个符号,范围(−2^53,2^53),与(+/-)9.007.199.254.740.992相关
  • 数组索引[2]: 32位,无符号 最大长度:2^32−1. 索引范围:[0,2^32−1) (不包括最大长度!)
  • 按位操作数[3]: 无符号右移运算符(>>>):32位,无符号,范围[0,2^32] 所有其他按位运算符:32位,包括符号,范围[−2^31,2^31)
  • “字符代码”,UTF-16代码单位为数字: 由String.fromCharCode()接受 由String.prototype.charCodeAt()返回 16位,无符号
参考资料:

[1] JavaScript中的安全整数

[2] JavaScript中的数组

[3] 标签位运算


来源:

双精度是52位+指数+符号。