我有二进制信息来自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?发布于 2015-04-09 18:03:32
您需要使用类型化阵列来访问缓冲区。您可以直接将数组文本放入其构造函数中,它将构造一个缓冲区或适当的大小。
就像
body=53 54 41 52 54 45 44 3a 31 34 32 38 36 30 32 30 38 37 37 38 36,我把它解释为十六进制编码的字节。
为此,您可以将TypedArray.from与map函数一起使用:
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发布于 2015-04-09 17:55:48
ArrayBuffer是类型化数组的备份,因此:
var arrayBuffer = new Uint8Array(octetStream).buffer;https://stackoverflow.com/questions/29545531
复制相似问题