[英]Convert Hex Chars into a String of Bits (Python or Ruby)
我有一個微控制器可以從HTTP API返回這樣的狀態響應:
<response><BS>026219AAF80F440206025019AAF816A944274480</BS></response>
最后兩個字符(在這種情況下為80
)代表一個十六進制值,我需要將其轉換為其二進制位10000000
。 每個位都是一個標志,與該硬件上的狀態相對應。
為了檢查8位中的每一個,我需要使用字符串80
(整個響應是一個字符串,我只抓住最后2個字符)並將其轉換為二進制10000000
的字符串表示形式,以便我可以檢查每個分別是8個字符。
最好的方法是什么? 我想用Python或Ruby來做,但是我很高興學習我想要做的一般技術然后弄清楚。
注意:我(顯然)沒有CS背景,所以這對我來說是陌生的。 我可能使用了錯誤的術語。 請隨時糾正我; 我希望我能找到想要的東西。
在Ruby中:
yourbits = "026219AAF80F440206025019AAF816A944274480"[-2,2].to_i(16).to_s(2)
=> "10000000"
puts yourbits
10000000
=> nil
解釋每個步驟-首先,對字符串進行切片以獲取最后2個字符:
"026219AAF80F440206025019AAF816A944274480"[-2,2]
=> '80'
將其轉換為整數:
"80".to_i(16)
=> 128
返回二進制g,以二進制表示:
128.to_s(2)
=> '10000000'
可能有一種更好(或更少混淆)的方式來做,但是我現在無法想象。
如果您僅測試單個位,則可以將其用作數字。
>>> bool(int('80', 16) & 0x40)
False
>>> bool(int('80', 16) & 0x80)
True
在Python中解碼十六進制的另一種方法是使用decode
方法:
data = "026219AAF80F440206025019AAF816A944274480".decode("hex")
最后兩個字符形成最后一個字節,可以使用data[-1]
進行訪問。 您可以使用Ignacio演示的&
運算符測試各個位。
在python中,您可以執行以下操作:
>>yourbits = str(bin(int("026219AAF80F440206025019AAF816A944274480"[-2:],16))[2:])
>>print yourbits
1000000
>>print yourbits[0]
'1'
[-2:]
用於選擇“ 80”, [2:]
用於刪除字符串的二進制表示形式前面的“ 1b”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.