我有来自TCP连接(WebSocket)的二进制信息。这将以编码格式跟踪到控制台,如下所示:
53 54 41 52 54 45 44 3a 31 34 32 38 36 30 32 30 38 37
我认为这是每个字节的十六进制编码。
该信息实际上是协议缓冲区信息。我想编写一个函数来使用我拥有的库对其进行解码。第一步是让我创建一种缓冲对象来封装二进制信息以供应给库。
我还不知道库的精确类型期望,但它需要某种二进制缓冲区。
协议缓冲区解码库API如下所示:
library.byteBufferToResponse(buffer);
如何从八位字节流的十六进制表示中实例化某种“二进制缓冲区”?
var octetStream = '34 36 10 04 1a 05 0a 01 30';
var arrayBuffer = new ArrayBuffer(); // How can I initialize this with the binary data?
答案 0 :(得分:2)
ArrayBuffer
是类型化数组的支持,所以:
var arrayBuffer = new Uint8Array(octetStream).buffer;
答案 1 :(得分:1)
您需要使用Typed Array来访问缓冲区。您可以直接将您拥有的数组文字放入其构造函数中,它将构造一个缓冲区或适当的大小。
与
body=53 54 41 52 54 45 44 3a 31 34 32 38 36 30 32 30 38 37 37 38 36
类似,我将其解释为十六进制编码字节。
为此,您可以将TypedArray.from
与地图功能结合使用:
var msg = "body=53 54 41 52 54 45 44 3a 31 34 32 38 36 30 32 30 38 37 37 38 36";
var arr = Uint8Array.from(msg.slice(5).split(" "), function(byte) {
return parseInt(byte, 16);
});
var buffer = arr.buffer; // not sure you actually need this