我经常需要将状态代码转换为位表示,以确定使用纯文本或二进制通信协议在分析器上激活的错误/状态。
我使用python来轮询数据并解析它。有时我真的很困惑,因为我发现有很多方法可以解决问题。今天我必须将每个字符为十六进制数字的字符串转换为其二进制表示。也就是说,每个十六进制字符必须转换为4位,其中MSB从左开始。注意:我需要char by char转换,并且前导零。
我设法建立了以下功能,这种功能以准单线方式完成。
def convertStatus(s, base=16):
n = int(math.log2(base))
b = "".join(["{{:0>{}b}}".format(n).format(int(x, base)) for x in s])
return b
例如,这会转换以下输入:
0123456789abcdef
成:
0000000100100011010001010110011110001001101010111100110111101111
这是我的目标。
现在,我想知道我可以用什么另外优雅的解决方案来实现我的目标?我还想更好地了解解决方案之间的优缺点。函数签名可以更改,但通常是输入和输出的字符串。让我们变得富有想象力......
答案 0 :(得分:0)
这很简单,分两步
int(aString, base=...)
format()
和mini print language 因此,将十六进制字符串转换为二进制可以作为
完成def h2b(x):
val = int(x, base=16)
return format(val, 'b')
这两个步骤是明确的。可能最好在一行,甚至是在线