将十六进制字符转换为二进制字符串(Python或Ruby)

1 投票
4 回答
1748 浏览
提问于 2025-04-17 04:08

我有一个微控制器,它通过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'

可能还有更好(或者更不让人困惑)的方法来实现这个,但我现在想不出来。

撰写回答