将数组值转换为整数

时间:2014-09-08 09:47:53

标签: javascript

我试图将字节转换为整数值,其工作为非负值,但不是负值。这是我的代码: -

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

JSFiddle Demo

2 个答案:

答案 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