将十六进制字符转换为二进制字符串(Python或Ruby)
我有一个微控制器,它通过HTTP API返回这样的状态响应:
<response><BS>026219AAF80F440206025019AAF816A944274480</BS></response>
最后两个字符,在这个例子中是80
,代表一个十六进制的值,我需要把它转换成二进制位10000000
。每一位都是一个标志,表示这个硬件的某种状态。
为了检查这8个位,我需要把字符串80
(整个响应是一个字符串,我只是抓取最后两个字符)转换成二进制的字符串表示10000000
,这样我就可以逐个检查这8个字符。
我该怎么做比较好呢?我想用Python或Ruby来实现,但我也乐意先了解一下我想做的基本方法,然后再去实现。
注意:我(显然)没有计算机科学的背景,所以很多东西对我来说都是陌生的。我可能用错了术语。如果有需要,请随时纠正我;我希望我能表达出我想要的内容。
4 个回答
2
在Python中,解码十六进制还有另一个方法,就是用 decode
这个函数:
data = "026219AAF80F440206025019AAF816A944274480".decode("hex")
最后两个字符组成了最后一个字节,你可以用 data[-1]
来访问它。你可以像Ignacio演示的那样,使用 &
操作符来测试单独的位。
3
如果你只是想测试某些单独的部分,那么你可以把它当作一个数字来使用。
>>> bool(int('80', 16) & 0x40)
False
>>> bool(int('80', 16) & 0x80)
True
5
在Ruby语言中:
yourbits = "026219AAF80F440206025019AAF816A944274480"[-2,2].to_i(16).to_s(2)
=> "10000000"
puts yourbits
10000000
=> nil
接下来,逐步解释一下——首先,截取字符串的最后两个字符:
"026219AAF80F440206025019AAF816A944274480"[-2,2]
=> '80'
然后把它转换成整数:
"80".to_i(16)
=> 128
再把它转换回字符串,这次是用二进制表示:
128.to_s(2)
=> '10000000'
可能还有更好(或者更不让人困惑)的方法来实现这个,但我现在想不出来。