解析十六进制浮点数

5

我有一个整数,例如4060

我该如何从它获取HEX浮点数(\x34\xC8\x7D\x45)?

JS没有float类型,因此我不知道如何进行此转换。

谢谢。


1
我觉得我可能漏掉了一些显而易见的东西,但是你有一个整数;除了隐式的“0”之外,没有小数部分。你想做什么? - David Thomas
1
投票“重复”的任何人,请了解IEEE 754格式...投票重新开放。 - robertklep
2个回答

7
如果你想要一个十六进制字符串,可以尝试这个方法:
> var b = new Buffer(4);
> b.writeFloatLE(4060, 0)
> b.toString('hex')
'00c07d45'

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

> Buffer('34C87D45', 'hex').readFloatLE(0)
4060.5126953125

更新: new Buffer(size)已经被弃用,但可以轻松地用Buffer.alloc(size)替代:

var b = Buffer.alloc(4);

它还可以读取大端或小端的双精度数。谢谢,非常有帮助。 - BHP

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();
}

例如:

numToFloat32Hex(4060,true) // returns "00C07D45"
numToFloat32Hex(4060,false) // returns "457DC000"

在Chrome和Firefox中进行了测试


2
Buffer 没有被弃用。 - robertklep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接