将一个由十六进制数字组成的线转换为二进制



我有" 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

您可以使用发电机表达式生成十六进制数字,然后像这样的二进制格式:

>>> 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将输入字符串划分为空格,然后在每个结果项目中迭代字符,并将格式作为四位二进制编号的字符串表示。

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

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

并在理解中使用它,您必须肯定地适应,因为您需要为每个角色分析并跳过空格。
对不起,我真的不擅长综合,无法帮助您,但是您明白了。

最新更新