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))
работает нормально.