将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”。