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

时间:2016-08-02 15:24:36

标签: javascript node.js

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

var hexValue = "0x43480000";

如何在Node.js中解析它并将其转换为数字(浮点数)? 像:

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

请注意,对于IEEE-754浮点数,十六进制值应为位模式。所以结果是200,而不是像parseInt("0x43480000")一样的1128792064。

2 个答案:

答案 0 :(得分:2)

(以下是OP的澄清所废弃的。)

parseIntMDN | spec)非常乐意为您解析该格式的十六进制:

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

它会在开头看到0x并假设为十六进制。如果您的十六进制字符串没有前缀("43480000"),则可以使用parseInt(str, 16)告诉parseInt使用基数16(十六进制)。但由于你有前缀,所以没有必要。

结果将是一个JavaScript编号,by definition是一个“双”(IEEE-754双精度二进制浮点)。

你说过你希望0x43480000以200.0的形式出现。这意味着你并没有真正解析 hex ,你试图获取一个包含IEEE-754浮点数位模式的字符串,表示为十六进制,并得到等效的IEEE-754浮点数。这与“解析十六进制”非常不同。

您提到的calculator适用于IEEE-754 - 精度二进制浮点值。在 double - 精度二进制浮点中,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),我认为没有任何内置功能可以帮助你。您必须隔离尾数和指数位,进行加宽,然后执行上述操作。

答案 1 :(得分:1)

Node.js Buffer类提供此功能:

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

另见: