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