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中的数字转换为字节数组,然后再转回数字。但是上述函数在处理非常大的数字时会产生错误的输出。
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
位,因此不应该出现溢出问题?alert(Math.pow(2,53))
可以正常工作。