1

在 JavaScript 中,我有一个整数数组。我想将每个整数的十六进制值放入 Int8Array 并将这些值回显到控制台。

对于以下代码,控制台[8, 5, 4, 4, 7, 0, 0, 0, 0, 0]会在我预期的时候回显[89,50,4E,47,...]

var data = [137,80,78,71]; // equals 0x89,0x50,0x4E,0x47
var hexValueArrayBuffer = new ArrayBuffer((data.length+1)*2);
var hexValueInt8Ary = new Int8Array(hexValueArrayBuffer);

var ixx=0;
for(var index in data){
    var hexValue = data[index].toString(16);
    hexValueInt8Ary.set(hexValue,ixx++);

    console.log("Added "+hexValue);
    if(ixx==data.length){
           console.log(hexValueInt8Ary);
    }
}

由此看来,似乎只添加了每个预期结果的第一个半字节。我能做些什么来获得预期的结果:

[89,50,4E,47,...]
4

1 回答 1

2

Int8Arrays 只存储整数(独立于基数)——但您正在尝试存储字符串。只需直接存储值。您可以在读取它们时将它们转换为十六进制,但基数绝不是值的一部分。

var data = [137,80,78,71]; // equals 0x89,0x50,0x4E,0x47
var hexValueArrayBuffer = new ArrayBuffer((data.length+1)*2);  // Why twice the size?
var hexValueInt8Ary = new Int8Array(hexValueArrayBuffer);

for(var i = 0; i < data.length; i++){
  hexValueInt8Ary.set[i] = data[i];  // you could use set to set all values at once
  var hexValue = hexValueInt8Ary[i].toString(16);

  console.log("Added "+hexValue);
}
console.log(hexValueInt8Ary);

}

于 2014-02-14T20:58:42.347 回答