假设我有一个十六进制值作为字符串:
var hexValue = "0x43480000";
如何在Node.js中解析它并将其转换为数字(浮点数)? 像:
var parsedNumber = hexStringToNumber(hexValue); // -> 200.0
请注意,对于IEEE-754浮点数,十六进制值应为位模式。所以结果是200,而不是像parseInt("0x43480000")
一样的1128792064。
答案 0 :(得分:2)
(以下是OP的澄清所废弃的。)
parseInt
(MDN | 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
另见: