首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从八进制流的十六进制表示形式实例化ArrayBuffer?

如何从八进制流的十六进制表示形式实例化ArrayBuffer?
EN

Stack Overflow用户
提问于 2015-04-09 17:50:22
回答 2查看 3.1K关注 0票数 1

我有二进制信息来自TCP连接(WebSocket)。它以编码格式跟踪到控制台,如下所示:

代码语言:javascript
复制
53 54 41 52 54 45 44 3a 31 34 32 38 36 30 32 30 38 37 

我猜想这是每个字节的十六进制编码。

该信息实际上是协议缓冲区信息。我想编写一个函数来使用我拥有的库来解码它。第一步是创建某种缓冲区对象来封装二进制信息以提供给库。

我还不知道库的确切类型期望,但它需要某种类型的二进制缓冲区。

协议缓冲区解码库API如下所示:

代码语言:javascript
复制
library.byteBufferToResponse(buffer);

如何从八进制流的十六进制表示中实例化某种类型的“二进制缓冲区”?

代码语言:javascript
复制
var octetStream = '34 36 10 04 1a 05 0a 01 30';
var arrayBuffer = new ArrayBuffer(); // How can I initialize this with the binary data?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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函数一起使用:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-04-09 17:55:48

ArrayBuffer是类型化数组的备份,因此:

代码语言:javascript
复制
var arrayBuffer = new Uint8Array(octetStream).buffer;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29545531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档