如何在Node.js中将十六进制位模式(字符串)转换为float
How to convert hex bit pattern (as string) to float in Node.js?
假设我有一个十六进制值作为字符串:
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),我认为没有任何内置的东西可以为你做这件事。您必须隔离尾数和指数位,进行加宽,然后执行上述操作。
相关文章:
- 如何在Javascript中将字符串与模式数组相匹配
- Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
- 从Regex模式获取子字符串
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- 在字符串中搜索模式并存储其值
- 获取非标准模式中的子字符串
- 模式显示文本区域内容不是字符串
- 带有模式的正则表达式字符串
- 在数组 jQuery 中查找特定的字符串模式
- Angular JS - 具有自定义验证规则的字符串模式
- 如何验证输入字段以确保Javascript中的特定字符串模式
- 使用Regex在字符串模式出现前后插入文本
- 在Javascript中测试字符串模式匹配
- 用于从字符串模式中提取城市名称的正则表达式
- Emacs -用另一个字符串模式替换一些字符串模式
- 从字符串中提取特定的字符串模式
- Javascript字符串模式匹配给出空结果
- 使用RegExp替换字符串模式的Javascript
- 匹配字符串模式的最简单方法
- 在正则表达式中验证字符串模式