簡體   English   中英

為Websocket RFC 6455在python中提取/移位位

[英]Extracting/Shifting bits in python for websocket RFC 6455

我正在嘗試按照RFC 6455規范在python im中實現我自己的Websocket服務器,並且im遇到了從Base Frame標頭中提取位的問題

我沒有協議問題我有基本二進制/十六進制數學魔術問題

根據規格,前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

但是在以后的規范中,我需要為操作碼獲取一個4bit的值,這是我需要的幫助,甚至可能需要鏈接到此數學方法的工作方式googled / duckduck導致我的大腦大部分結果來自stackoverflow

甚至更動手了,它開始就位了,我在此問題上停留了大約4天,但對於任何人都可以提供的任何信息仍然無法解決。

如果只需要考慮前4位(最高有效位),則需要右移4位(用And進行額外的掩碼可能會無用,例如,如果您的值在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 ,即“隔離”所需的位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM