function intFromBytes(x){
var val = 0;
for (var i = 0; i < x.length; ++i) {
val += x[i];
if (i < x.length-1) {
val = val << 8;
}
}
return val;
}
function getInt64Bytes(x){
var bytes = [];
var i = 8;
do {
bytes[--i] = x & (255);
x = x>>8;
} while (i)
return bytes;
}
我想转换成一个字节数组,然后回到一个数字的JavaScript数字。但是,上述功能会产生大量不正确的输出。转换JavaScript整数到字节数组,并返回
var array = getInt64Bytes(23423423);
var value = intFromBytes(array);
console.log(value); //Prints 23423423 - correct
var array = getInt64Bytes(45035996273704);
var value = intFromBytes(array);
console.log(value); //Prints -1030792152 - incorrect
这是我的理解,JavaScript浮动53位,所以它不应该溢出?警报(Math.pow(2,53))正常工作。
位移位总是上签字,32位整数进行。 – Crozin
这是有道理的,让它成为答案,我会接受。谢谢 –
那么解决方法是什么? – Justin