我试图将字节转换为整数值,其工作为非负值,但不是负值。这是我的代码: -
var byteArrayToLong = function (byteArray) {
var value = 0;
for (var i = byteArray.length - 1; i >= 0; i--) {
value = (value * 256) + byteArray[i];
}
console.log(value);
return value;
};
byteArrayToLong([158,175,59,0]); //3911582 correct
byteArrayToLong([229,93,138,255])//4287258085 incorrect the correct value is (i.e from c# BitConverter.ToInt32() method) -7709211
答案 0 :(得分:5)
将值转换为如下所示的整数的方法非常简单:
var val = 23.234;
console.log(~~val) // ~~ to convert into an integer
您可以在转换中使用此功能......
var byteArrayToLong = function (byteArray) {
var value = 0;
for (var i = byteArray.length - 1; i >= 0; i--) {
value = (value * 256) + byteArray[i];
}
console.log(~~value);
return ~~value;
};
byteArrayToLong([158,175,59,0]); //3911582
byteArrayToLong([229,93,138,255]) //-7709211
答案 1 :(得分:2)
C-Link尼泊尔的解决方案非常优雅。这是一个更冗长的问题:您显然正在尝试将字节数组视为数字的two's complement表示。你必须考虑到,最高字节的第一位描绘了符号。因此,您应该单独处理第一个字节:
var byteArrayToLong = function (byteArray) {
var value = 0, firstByteOffset = byteArray.length - 1;
if (byteArray[firstByteOffset] >= 127) {
value = byteArray[firstByteOffset] - 256;
} else {
value = byteArray[firstByteOffset];
}
for (var i = firstByteOffset - 1; i >= 0; i--) {
value = (value * 256) + byteArray[i];
}
console.log(value);
return value;
};
byteArrayToLong([158,175,59,0]); // 3911582
byteArrayToLong([229,93,138,255]); // -7709211