【问题标题】:Convert a line that consists of hex numbers to binary将包含十六进制数字的行转换为二进制
【发布时间】:2019-05-04 15:50:42
【问题描述】:

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

【问题讨论】:

    标签: python string hex


    【解决方案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 按空格分割输入字符串,然后迭代每个结果项中的字符并格式化为四位二进制数的字符串表示形式。

    【讨论】:

    • 使用此方法默认打印或保存这样的数字“['39 14 40 00 21 74 D1 69 22 53 AA 36 A4 08 2F 49']”。还有 [' 额外的,我无法摆脱。正因为如此,这让事情变得很困难。
    • hex_line = str([next(islice(file_name, 38, 39))[6:55]]) 的输出究竟是什么?听起来它与您问题中的字符串不一样。
    • ['39 14 40 00 21 74 D1 69 22 53 AA 36 A4 08 2F 49'] 是输出。对不起,我也会更新问题。
    • 让答案使用s[0].split() 应该可行。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 2014-11-18
      • 2012-06-26
      • 2016-08-28
      • 2013-07-25
      相关资源
      最近更新 更多