簡體   English   中英

將十六進制字符轉換為位字符串(Python或Ruby)

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

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