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

时间:2012-05-28 21:08:48

标签: python websocket

我正在尝试按照RFC 6455规范在python中实现我自己的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位值 这就是我需要帮助的可能甚至链接到这个数学运算如何我用Google搜索/ duckducked我的大脑大部分结果来自stackoverflow

甚至更多的修修补补和它开始落实到位我已经被困在这里大约4天了,现在仍然没有解决任何人可以提供的信息。

1 个答案:

答案 0 :(得分:1)

如果你只需要考虑第一个(最高有效)4位,你需要右移4(使用And进行额外屏蔽可能是无用的,例如,如果你的值在0-255范围内,但它甚至会强调你感兴趣的比特)。 E.g。

>>> 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这样的八位字节,每个字母都有一点。你必须转移和And以隔离你感兴趣的位。例如。假设你的规范说cd位定义了四种不同的东西。为了获得0-3的数字,你再次右移4,并且使用3,即0000 0011,即你“隔离”你想要的位数。