【问题标题】:python: string of hex values to binarypython:将十六进制值的字符串转换为二进制
【发布时间】:2013-08-28 10:46:33
【问题描述】:

这是我的输入示例:

a = 41cf4a077a7454

它们代表十六进制值,x41 xCF x4A 等...

我需要将它们转换成这样的二进制字符串(期望输出):

01000001110011110100101000000111011110100111010001010100

x41 = 01000001 xCF = 11001111 x4A = 01001010 等等……

我以前做的代码是这样的:

return bin(int(str(a), 16))[2:]

但是,它会产生一个前面没有零的字符串:

1000001110011110100101000000111011110100111010001010100

看起来零被截断了,因为它被解释为一个整数。 有没有办法可以保持零,因为不是每个被转换的字符串都以二进制零开头。

我希望这是有道理的。谢谢。

【问题讨论】:

标签: python binary hex


【解决方案1】:

一条线解决方案:

>>> a = '41cf4a077a7454'
>>> ''.join('{0:08b}'.format(int(x, 16)) for x in (a[i:i+2] for i in xrange(0, len(a), 2)))
'01000001110011110100101000000111011110100111010001010100'

或扩展您的解决方案:

>>> a = '41cf4a077a7454'
>>> x = bin(int(str(a), 16))[2:]
>>> '0'*(8-len(x)%8) + x
'01000001110011110100101000000111011110100111010001010100'

【讨论】:

    【解决方案2】:

    此解决方案可能适合您。

    >>> a = '41cf4a077a7454'
    >>> b = [a[2*i]+a[2*i+1] for i in range(len(a)/2)]
     ['41', 'cf', '4a', '07', '7a', '74', '54']
    >>> c = map(lambda x: "{0:08b}".format(int(x, 16)), b)
    ['01000001',
     '11001111',
     '01001010',
     '00000111',
     '01111010',
     '01110100',
     '01010100']
    >>> "".join(c)
    '01000001000111001100111111110100010010101010000000000111'
    

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 2021-10-30
      • 2020-06-20
      • 2018-01-22
      • 2010-11-17
      • 1970-01-01
      • 2023-03-04
      • 2019-08-23
      • 1970-01-01
      相关资源
      最近更新 更多