将整数转换为Int8Array,并让它们在JavaScript命令行上正确地回显
在JavaScript中,我有一个整数数组。我想将每个整数的十六进制值放入一个Int8Array中,并将这些值回显到控制台 对于以下代码,当我期望将整数转换为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
[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
}