解析HEX浮点数

use*_*103 5 javascript ieee-754 node.js

例如,我有整数4060.

我怎么\x34\xC8\x7D\x45能从它获得HEX float()?

JS没有float打字,所以我不知道如何进行这种转换.

谢谢.

rob*_*lep 7

如果你想要一个十六进制字符串,试试这个:

> var b = new Buffer(4);
> b.writeFloatLE(4060, 0)
> b.toString('hex')
'00c07d45'
Run Code Online (Sandbox Code Playgroud)

另一种方式(使用您的输入):

> Buffer('34C87D45', 'hex').readFloatLE(0)
4060.5126953125
Run Code Online (Sandbox Code Playgroud)

更新:new Buffer(size)已被弃用,但它很容易被替换为Buffer.alloc(size):

var b = Buffer.alloc(4);
Run Code Online (Sandbox Code Playgroud)


use*_*305 2

上述答案不再有效。Buffer已弃用(请参阅https://nodejs.org/api/buffer.html#buffer_new_buffer_size)。

新解决方案:

function numToFloat32Hex(v,le)
{
    if(isNaN(v)) return false;
    var buf = new ArrayBuffer(4);
    var dv  = new DataView(buf);
    dv.setFloat32(0, v, true);
    return ("0000000"+dv.getUint32(0,!(le||false)).toString(16)).slice(-8).toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)

例如:

numToFloat32Hex(4060,true) // returns "00C07D45"
numToFloat32Hex(4060,false) // returns "457DC000"
Run Code Online (Sandbox Code Playgroud)

在 Chrome 和 Firefox 中测试

  • `Buffer` 尚未被弃用 (2认同)