将包含十六进制数字的行转换为二进制

时间:2019-05-04 15:50:43

标签: python string hex

我有一行" 39 14 40 00 21 74 D1 69 22 53 AA 36 A4 08 2F 49"。每个数字都是一个十六进制值。我想将每个十六进制数字转换为二进制数字。我知道python不了解十六进制值等。 我看到的问题是我正在选择一个文本文件并将其另存为字符串。一旦保存为字符串,python不允许我将每个单独的值转换为十六进制。

当我保存给定的行格式文件时,我将其另存为列表或字符串。 列表无法转换,但是我也无法将字符串转换为十六进制。示例我希望将第一个值39写为0011 1001,以此类推。

if line1.startswith("Start Test tb_sctpReadEFuseTest"):
    hex_line = str([next(islice(file_name, 38, 39))[6:55]])
    binary_form= ''.join(['{0:08b}'.format(x) for x in hex_line])
    print(hex_line)
    print(binary_form)

字符串:39 14 40 00 21 74 D1 69 22 53 AA 36 A4 08 2F 49 输出:0011 1001 0001 0100 0100 0000 0000 0000 0010 0001 0111 0100

2 个答案:

答案 0 :(得分:1)

您可以使用生成器表达式生成十六进制数字,然后将其格式化为二进制格式:

>>> s = '39 14 40 00 21 74 D1 69 22 53 AA 36 A4 08 2F 49'
>>> ' '.join('{:0>4b}'.format(int(y, 16)) for x in s.split() for y in x)
'0011 1001 0001 0100 0100 0000 0000 0000 0010 0001 0111 0100 1101 0001 0110 1001 0010 0010 0101 0011 1010 1010 0011 0110 1010 0100 0000 1000 0010 1111 0100 1001'

genexp将输入字符串用空格分割,然后迭代每个结果项中的字符,并将其格式化为四位二进制数的字符串表示形式。

答案 1 :(得分:0)

这里的格式没有帮助,因为它期望数值不是字符串。
一种方法(虽然有点“蛮力”)可能是创建一个字典,将每个字符从'0'转换为'F'到其二进制表示形式:

hex2bin = { '0': '0000', '1': '0001' ... 'F': '1111'}

并在您的理解中使用它,因为您需要解析每个字符并跳过空格,因此您肯定必须适应。
对不起,我的理解力真的很差,不能为您提供更多帮助,但是您明白了。