将整数转换为Int8Array,并让它们在JavaScript命令行上正确地回显

将整数转换为Int8Array,并让它们在JavaScript命令行上正确地回显,javascript,hex,arraybuffer,Javascript,Hex,Arraybuffer,在JavaScript中,我有一个整数数组。我想将每个整数的十六进制值放入一个Int8Array中,并将这些值回显到控制台 对于以下代码,当我期望[89,50,4E,47,…]时,控制台会回显[8,5,4,4,7,0,0,0,0] var data = [137,80,78,71]; // equals 0x89,0x50,0x4E,0x47 var hexValueArrayBuffer = new ArrayBuffer((data.length+1)*2); var hexValueInt

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

对于以下代码,当我期望
[89,50,4E,47,…]时,控制台会回显
[8,5,4,4,7,0,0,0,0]

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,...]

Int8Array只存储整数(与基无关)——但您正在尝试存储字符串。直接存储这些值即可。您可以在读取它们时将其转换为十六进制,但基永远不会是值的一部分

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);
var数据=[137,80,78,71];//等于0x89,0x50,0x4E,0x47
var hexValueArrayBuffer=新的ArrayBuffer((data.length+1)*2);//为什么要两倍大?
var hexValueInt8Ary=新的Int8Array(hexValueArrayBuffer);
对于(变量i=0;i
}