将javascript Integer转换为Byte数组并返回 [英] Converting javascript Integer to Byte array and back
本文介绍了将javascript Integer转换为Byte数组并返回的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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编号转换为字节数组然后返回一个号码。但是,上述函数产生的输出数量非常大。
I am trying to convert a javascript number to a byte array and then back to a number. However the above functions produce incorrect output with a very large number.
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))工作正常。
It is my understanding that javascript floats are 53 bits so it shouldn't be overflowing? alert(Math.pow(2,53)) works fine.
推荐答案
在JavaScript位移位( >>
,<<
)始终在带符号的32位整数上执行。这会导致大量范围溢出。
In JavaScript bit shifts (>>
, <<
) are always performed on signed, 32-bits integers. This leads to range overflow for large numbers.
这篇关于将javascript Integer转换为Byte数组并返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文