python中二进制转换的替代方法

时间:2015-09-03 20:20:30

标签: python hex converter bin

我经常需要将状态代码转换为位表示,以确定使用纯文本或二进制通信协议在分析器上激活的错误/状态。

我使用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

这是我的目标。

现在,我想知道我可以用什么另外优雅的解决方案来实现我的目标?我还想更好地了解解决方案之间的优缺点。函数签名可以更改,但通常是输入和输出的字符串。让我们变得富有想象力......

1 个答案:

答案 0 :(得分:0)

这很简单,分两步

  1. 将字符串转换为int几乎是微不足道的:使用int(aString, base=...)
    • 第一个参数可以是一个字符串!
    • 和基数,几乎所有选项都是可能的
  2. 使用format()mini print language
  3. 可以轻松将数字转换为字符串

    因此,将十六进制字符串转换为二进制可以作为

    完成
    def h2b(x):
        val = int(x, base=16)
        return format(val, 'b') 
    

    这两个步骤是明确的。可能最好在一行,甚至是在线