在 python 中为 websocket RFC 6455 提取/移动位



我正在尝试按照 RFC 6455 规范在 python im 中实现我自己的 Websocket 服务器,并且在从基本帧标头中提取位时遇到问题

我对协议没有问题 我在基本的二进制/十六进制数学魔术方面有问题

根据规格,前 4 位是单位值

所以为了获得第一个位,我做了这样的事情(d 是我来自 websocket 的数据)

first_byte = ord(d[0])
print "finished bit",(first_byte >> 7) & 1

稍后,如果我想获得有效载荷大小,我会这样做

sec_byte = ord(d[1])
print "payload size",sec_byte & 0x7f

但是在规范的后面,我需要为操作码获取一个 4 位值这就是我需要帮助的,甚至可能是这个数学如何工作的链接,我谷歌搜索/鸭鸭子我的大脑大部分结果来自堆栈溢出

更多的修补和它开始到位,我已经在这个上面停留了大约 4 天,仍然没有解决任何人都可以提供的信息。

如果你只需要考虑第一个(最重要的)4位,你需要右移4(额外的掩码和 和可能没有用,例如,如果你的值在0-255范围内,但它甚至强调你感兴趣的位)。 例如

>>> d = [128, 80, 40]
>>> print (d[0] >> 4) & 15
8
>>> print (d[1] >> 4) & 15
5
>>> print (d[2] >> 4) & 15
2

128是二进制1000 0000;右移4得到0000 1000("新"0位从左进入),即8;80是0101 0000,所以你得到0000 0101;最后40是0010 1000,我们得到0000 0010

一般来说,考虑像abcd efgh这样的八位字节,其中每个字母都是一个位。你必须转移和 为了隔离你感兴趣的位。例如,假设您的规范说cd位定义了四种不同类型的东西。为了获得那个 0-3 的数字,你再次右移 4,用 3 移位,即0000 0011,即你"隔离"你想要的位。

相关内容

  • 没有找到相关文章

最新更新