gpt4 book ai didi

javascript - 如何有效地从字节中读取位?

转载 作者:IT老高 更新时间:2023-10-28 23:25:18 27 4
gpt4 key购买 nike

我正在开发一个包含 WebSockets 的项目,服务器 (Node.js) 和客户端 (Chrome) 之间的数据使用我设置的自定义(非常简单)格式进行数据交换。

我以 3 位的形式发送数据,因为我发送的项目都有 8 种可能性。数据格式如下:

            0          1
bit index 01234567 8901...
item aaabbbcc cddd...

目前,我正在从字节中解析项目,如下所示:

var itemA = bytes[0] >> 5;
var itemB = (bytes[0] >> 2) & 7;
var itemC = (bytes[0] & 3) << 1 | bytes[1] >> 7;
var itemD = (bytes[1] >> 4) & 7;

就个人而言,这感觉太复杂了。问题是它只是复杂的,因为我以字节为单位获取数据,它是 8 的倍数。要解析出 3 位的项目,我必须进行位移,做 AND 操作,因为 8 不能被 3 整除有时甚至必须组合两个字节的一部分,例如 itemC

将这些数据作为 3 位组而不是 8 位组读取会更有效。

我想出的是使用 .toString(2) 将所有字节转换为位到字符串,然后使用 .substring 得到一个有长度的子字符串3,并使用 parseInt(bitString, 2) 转换回数字,但我想这不是这样做的方法,因为字符串操作很慢而且我实际上没有做任何与字符串相关的事情.

是否可以读取组中的位,例如3 而不是从字节中解析它们?或者有没有更有效的方法从字节中读取位?

最佳答案

二进制与和位移操作是最快的方法。它们很好地翻译成机器代码指令。进一步加快速度的唯一方法是牺牲带宽来换取速度,例如每个字节不使用超过 3 位,但从您的问题来看,您可能已经考虑并拒绝了这种权衡。

关于javascript - 如何有效地从字节中读取位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7859826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com