Hex字符串到INT32 - Little Endian(DCBA格式)Javascript

时间:2017-04-05 19:02:40

标签: javascript node.js encryption decode

基于可怜的文档实现某些内容,而没有任何信息。

这个例子就是这个

(7F02AAF7)H => (F7AA027F)H = -139853185

假设我将7F02AAF7转换为F7AA027F,然后输出通过 'parseInt('F7AA027F', 16)'与我的期望不同。

我做了一些谷歌搜索,找到了这个网站http://www.scadacore.com/field-tools/programming-calculators/online-hex-converter/

当您输入7F02AAF7时,它会在INT32 - Little Endian (DCBA)系统下处理为想要的号码。我试过这个搜索词,但没有运气。 你能告诉我我在这里应该做什么,是否有任何node.js库可以帮助我。

3 个答案:

答案 0 :(得分:2)

您可以调整answer的优秀T.J. Crowder ,并使用DataView#setUint8DataView#getInt32的给定字节和littleEndian的指示符。

var data = '7F02AAF7'.match(/../g);

// Create a buffer
var buf = new ArrayBuffer(4);
// Create a data view of it
var view = new DataView(buf);

// set bytes
data.forEach(function (b, i) {
    view.setUint8(i, parseInt(b, 16));
});

// get an int32 with little endian
var num = view.getInt32(0, 1);
console.log(num);

答案 1 :(得分:2)

Node可以使用buffers

轻松完成
Buffer.from('7F02AAF7', 'hex').readInt32LE()

答案 2 :(得分:1)

JavaScript整数通常存储为Number value

  

<强> 4.3.19
  原始值对应于双精度64位二进制格式IEEE 754值

因此parseInt的结果是一个浮点数,其中值无损地适合浮点数的小数部分(52位容量)。 parseInt也不会将其解析为双补码表示法。

如果你想把你读到的任何东西强制为32位,那么最简单的就是两个强制它通过应用二进制操作自动转换为32位。我建议:

parseInt("F7AA027F", 16) | 0

带0的二进制OR(|)本质上是无操作,但它将任何整数转换为32位。这个技巧通常用于将数字转换为32位,以便更快地对其进行计算。

此外,这是便携式的。