bro*_*ter 0 javascript floating-point parsing hex ieee-754
我已经环顾 Stackoverflow 几天了,试图解决这个问题,并在 JsFiddle 中玩了一段时间,但到目前为止还没有运气。
这是我的问题:我收到一个包含多个值的 base64 编码字符串。无符号整数和浮点数。将 base64 解码为十六进制字符串很顺利。无符号整数也是如此。问题在于解码浮点数。
b76a40e9000000350a3d422d00000059e37c409a0000002f90003b6e00000000
这是我的数据,作为一个例子,使用前 32 位,是一个 IEE-754 浮点数,字节顺序1-0-3-2。所以这就是0xb76a40e9我所知道的7.30363941192626953125,当我们交换它时3-2-0-1它变成了0x40e9b76a。当我将此十六进制字符串放入https://www.h-schmidt.net/FloatConverter/IEEE754.html已确认的。
我的问题是,如果 javascript 中存在将十六进制 IEEE-754 浮点字符串转换为 javascript 浮点数的实现,我已经搜索了很长时间。JS 自己的 parseInt 将接受十六进制,但 parseFloat 出于某种原因不接受?
任何输入都将不胜感激,迄今为止人们制作的所有代码示例都产生了与我预期不同的数字。
使用DataView以下命令从单词中解压浮点数:
> v = new DataView(new ArrayBuffer(4))
> v.setUint32(0, 0x40e9b76a)
> v.getFloat32(0)
7.3036394119262695
Run Code Online (Sandbox Code Playgroud)
(推荐超过Uint32Array和Float32Array因为它不继承平台的字节序。)
您也可以使用它来交换两个 16 位单元:
> v.setUint32(0, 0xb76a40e9)
> ((hi, lo) => {
v.setUint16(0, hi);
v.setUint16(2, lo);
})(v.getUint16(2), v.getUint16(0))
> v.getUint32(0).toString(16)
'40e9b76a'
Run Code Online (Sandbox Code Playgroud)