如何在Node.js中将十六进制位模式(字符串)转换为float

How to convert hex bit pattern (as string) to float in Node.js?

本文关键字:字符串 模式 转换 float 十六进制 Node js      更新时间:2023-09-26

假设我有一个十六进制值作为字符串:

var hexValue = "0x43480000";

如何在Node.js中解析它并将其转换为数字(float)?类似:

var parsedNumber = hexStringToNumber(hexValue); // -> 200.0

请注意,十六进制值是IEEE-754浮点数的位模式。因此,结果是200,而不是像只有parseInt("0x43480000")那样的1128792064。

Node.js Buffer类提供了以下功能:

var buf = new Buffer("43480000", "hex");
var number = buf.readFloatBE(0);
console.log(number); // 200

另请参阅:

  • 在节点中将ieee754转换为十进制
  • JavaScript中的IEEE 754浮点编码和解码

(以下内容已被操作人员澄清而作废)

parseInt(MDN|spec)非常乐意为您解析这种格式的十六进制:

var hexValue = parseInt("0x43480000");
console.log(hexValue);

它将在开头看到0x,并假定为十六进制。如果有一个不带前缀("43480000")的十六进制字符串,则使用parseInt(str, 16)告诉parseInt使用16进制(十六进制)。但既然你有前缀,就没有必要了。

结果将是一个JavaScript数字,根据定义,它是一个"双精度"(IEEE-754双精度二进制浮点)。


你说过你希望0x43480000的版本是200.0。这意味着您并没有真正解析hex,而是试图获取一个包含IEEE-754浮点数的位模式的字符串,用hex表示,并获得等效的IEEE-754浮点数。这与"解析十六进制"非常不同

您提到的计算器适用于IEEE-754单精度二进制浮点值。0x43480000位模式在双精度二进制浮点中不是200。但是0x40690000是.

据我所知,唯一简单的方法是使用DataView:

var dv = new DataView(new ArrayBuffer(8));
dv.setUint32(0, parseInt("0x40690000"));
var num = dv.getFloat64(0)
console.log(num);

如果你想转换单个精度版本(0x43480000),我认为没有任何内置的东西可以为你做这件事。您必须隔离尾数和指数位,进行加宽,然后执行上述操作。