将Hex Chars转换为比特串(Python或Ruby)
我有一个微控制器从HTTP API返回这样的状态响应:
026219AAF80F440206025019AAF816A944274480
最后两个字符,在本例中为80
,表示我需要转换为其二进制位10000000
的hex值。 每个位都是一个标志,对应于该硬件上的状态。
对于我来检查每个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
以二进制表示forms返回字符串againg:
128.to_s(2) => '10000000'
可能有更好(或更少混乱)的方式,但我现在无法想象它。
如果您只是测试单个位,那么您可以将其用作数字。
>>> bool(int('80', 16) & 0x40) False >>> bool(int('80', 16) & 0x80) True
在Python中解码hex的另一个选择是使用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”。