基于可怜的文档实现某些内容,而没有任何信息。
这个例子就是这个
(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库可以帮助我。
答案 0 :(得分:2)
您可以调整answer的优秀T.J. Crowder ,并使用DataView#setUint8
为DataView#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位,以便更快地对其进行计算。
此外,这是便携式的。