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;
}
Próbuję przekonwertować numer javascript na tablicę bajtów, a następnie z powrotem na numer. Jednak powyższe funkcje dają nieprawidłowe wyjście o bardzo dużej liczbie.Konwersja javascript Integer na Byte array and back
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
To jest moje zrozumienie, że pływaki javascript są 53 bity, więc nie powinna być przepełniona? alert (Math.pow (2,53)) działa dobrze.
Bit zmiany są zawsze wykonywane na podpisanych 32-bitowych liczb całkowitych. – Crozin
To ma sens, niech to będzie odpowiedź, a ja to zaakceptuję. Dzięki –
Jakie jest to obejście? – Justin