我正在开发一个包含WebSockets的项目,服务器(Node.js)和客户端(Chrome)之间的数据通过我设置的自定义(非常简单)数据交换格式进行发送。
由于我发送的项均有8个可能性,因此我将它们拆分成3位组。数据格式如下:
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位的元素,我必须进行位移、按位与操作,而因为8不能被3整除,有时我甚至还要组合两个字节的部分(如itemC
)。将数据分组读取3位比分组读取8位要更有效率。
我的解决思路是将所有的字节转换为字符串,并使用
.toString(2)
方法将它们转换为二进制数的字符串表示形式,然后使用.substring
方法截取3位的子字符串,并使用parseInt(bitString, 2)
将截取出来的字符串再转换成数字。但我想这并不是最好的方法,因为字符串的操作速度较慢,而且实际上我并没有涉及任何与字符串相关的操作。是否有可能以例如3位的分组方式读取比特,而不是从字节中解析?或者是否有更有效的方法从字节中读取比特?