Javascript中64位十六进制到十进制

时间:2018-06-11 17:14:49

标签: javascript node.js floating-point

需要在节点中将64位十六进制转换为十进制,最好不要使用第三方库。

输入:

Hex: 0x3fe2da2f8bdec5f4
Hex: 0x402A000000000000

输出

Dec: .589134
Dec: 13

2 个答案:

答案 0 :(得分:2)

使用Buffer

,您可以在node.js中轻松完成此操作而无需任何库
const hex = '3fe2da2f8bdec5f4';
const result = Buffer.from( hex, 'hex' ).readDoubleBE( 0 );
console.log( result );

警告: 0的偏移量不是可选的。 node.js API文档的几个版本显示了不为大多数Buffer函数提供偏移量的示例,并将其视为0的偏移量,但由于bug in node.js版本9.4.09.5.09.6.09.6.19.7如果你做的话,你会得到稍微不正确的结果(例如13.000001912238076而不是13)不要在这些版本中指定readDoubleBE的偏移量。

答案 1 :(得分:1)

对于那些试图在客户端javscript中执行此操作的人

// Split the array by bytes 
a = "3fe2da2f8bdec5f4"
b = a.match(/.{2}/g);

// Create byte array 
let buffer = new ArrayBuffer(8)
let bytes = new Uint8Array(buffer)

// Populate array 
for(let i = 0; i < 8; ++i) {
    bytes[i] = parseInt(b[i], 16);
}

// Convert and print 
let view = new DataView(buffer)
console.log(view.getFloat64(0, false));