[英]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.