我在字符串中有一个十六进制值,如
h = '00112233aabbccddee'
我知道我可以将其转换为二进制文件:
h = bin(int(h, 16))[2:]
但是,这会失去领先的0。反正有没有失去0的转换呢?或者最好的方法是在转换之前计算前导0的数量然后在之后添加它。
答案 0 :(得分:18)
我认为默认情况下无法保留这些前导零。
每个十六进制数字转换为4个二进制数字,因此新字符串的长度应该是原始字符串的4倍。
h_size = len(h) * 4
然后,您可以使用.zfill
将零填充到您想要的大小:
h = ( bin(int(h, 16))[2:] ).zfill(h_size)
答案 1 :(得分:6)
这在Python中实际上非常简单,因为它对整数的大小没有任何限制。只需将'1'
添加到十六进制字符串中,然后从输出中删除相应的'1'
。
>>> h = '00112233aabbccddee'
>>> bin(int(h, 16))[2:] # old way
'1000100100010001100111010101010111011110011001101110111101110'
>>> bin(int('1'+h, 16))[3:] # new way
'000000000001000100100010001100111010101010111011110011001101110111101110'
答案 2 :(得分:2)
基本相同,但每个hexdigit填充4个绑定
''.join(bin(int(c, 16))[2:].zfill(4) for c in h)
答案 3 :(得分:0)
像python这样的新手,我会像这样继续
datastring = 'HexInFormOfString'
当python将字符串转换为Hex时,填充以容纳前面的零(如果有)。
datastrPadded = 'ffff' + datastring
将填充值转换为二进制。
databin = bin(int(datastrPadded,16))
删除python添加的2bits('0b')表示二进制+ 16填充位。
databinCrop = databin[18:]
答案 4 :(得分:0)
这会将十六进制字符串转换为二进制字符串。由于您希望长度取决于原始长度,因此这可能是您想要的。
data = ""
while len(h) > 0:
data = data + chr(int(h[0:2], 16))
h = h[2:]
print h
答案 5 :(得分:0)
hexa = '91278c4bfb3cbb95ffddc668d995bfe0'
binary = bin(int(hexa, 16))[2:]
print binary
hexa_dec = hex(int(binary, 2))[2:]
print hexa_dec
答案 6 :(得分:0)
我需要使用整数作为输入,并使用带有前缀“ 0b”和“ 0x”的纯十六进制/ bin字符串,所以我的一般解决方案是:
def pure_bin(data, no_of_bits=NO_OF_BITS):
data = data + 2**(no_of_bits)
return bin(data)[3:]
def pure_hex(data, no_of_bits=NO_OF_BITS):
if (no_of_bits%4) != 0:
no_of_bits = 4*int(no_of_bits / 4) + 4
data = data + 2**(no_of_bits)
return hex(data)[3:]