python:十六进制值到二进制的字符串

时间:2013-08-28 10:46:34

标签: python binary hex

这是我输入的一个示例:

a = 41cf4a077a7454

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

我需要将它们转换为一个二进制字符串,如下所示(希望输出):

01000001110011110100101000000111011110100111010001010100

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

我以前使用的代码看起来像这样:

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

然而,它在前面产生一个没有零的字符串:

1000001110011110100101000000111011110100111010001010100

看起来零被切断,因为它被解释为整数。 有没有办法可以保持零,因为并非所有被转换的字符串都以二进制零开始。

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

2 个答案:

答案 0 :(得分:2)

一线解决方案:

>>> 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'

答案 1 :(得分:1)

此解决方案可能适合您。

>>> 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'