繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM