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