如何将一个NodeJS二进制缓冲区转换为JavaScript数组缓冲区?
当前回答
"From ArrayBuffer to Buffer"可以这样做:
var buffer = Buffer.from( new Uint8Array(arrayBuffer) );
其他回答
现在有一个非常有用的npm包:buffer https://github.com/feross/buffer
它试图提供一个API,是100%相同的节点的缓冲区API,并允许:
将类型化数组转换为缓冲区:https://github.com/feross/buffer#convert-typed-array-to-buffer 将缓冲区转换为类型化数组:https://github.com/feross/buffer#convert-buffer-to-typed-array
还有更多。
我尝试了上面的Float64Array,它只是没有工作。
我最终意识到,真正的数据需要读入正确的块视图。这意味着一次从源Buffer读取8个字节。
总之,这是我最后得到的……
var buff = new Buffer("40100000000000004014000000000000", "hex");
var ab = new ArrayBuffer(buff.length);
var view = new Float64Array(ab);
var viewIndex = 0;
for (var bufferIndex=0;bufferIndex<buff.length;bufferIndex=bufferIndex+8) {
view[viewIndex] = buff.readDoubleLE(bufferIndex);
viewIndex++;
}
使用以下优秀的npm包:to-arraybuffer。
或者,您可以自己实现它。如果你的缓冲区叫buf,这样做:
buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)
"From ArrayBuffer to Buffer"可以这样做:
var buffer = Buffer.from( new Uint8Array(arrayBuffer) );
我已经将节点更新到5.0.0版本 我在研究这个:
function toArrayBuffer(buffer){
var array = [];
var json = buffer.toJSON();
var list = json.data
for(var key in list){
array.push(fixcode(list[key].toString(16)))
}
function fixcode(key){
if(key.length==1){
return '0'+key.toUpperCase()
}else{
return key.toUpperCase()
}
}
return array
}
我用它来检查我的vhd磁盘映像。