python - 将十六进制转换为二进制
我有ABC123EFFF。
我想拥有001010101111000001001000111110111111111111(即二进制代表,例如42位数和前导零)。
怎么样?
18个解决方案
92 votes
为了解决左侧尾随零问题:
my_hexdata = "1a"
scale = 16 ## equals to hexadecimal
num_of_bits = 8
bin(int(my_hexdata, scale))[2:].zfill(num_of_bits)
它将给出00011010而不是修剪版本。
Onedinkenedi answered 2019-09-14T20:22:09Z
52 votes
import binascii
binary_string = binascii.unhexlify(hex_string)
读
binascii.unhexlify
返回由指定为参数的十六进制字符串表示的二进制数据。
rahul answered 2019-09-14T20:22:45Z
40 votes
bin(int("abc123efff", 16))[2:]
Glenn Maynard answered 2019-09-14T20:23:02Z
29 votes
>>> bin( 0xABC123EFFF )
'0b1010101111000001001000111110111111111111'
Simple answered 2019-09-14T20:23:26Z
24 votes
将hex转换为二进制
我有ABC123EFFF。
我想拥有001010101111000001001000111110111111111111(即二进制文件 再版。 比方说,42位数和前导零。
简短回答:
Python 3.6中的新f字符串允许您使用非常简洁的语法执行此操作:
>>> f'{0xABC123EFFF:0>42b}'
'001010101111000001001000111110111111111111'
或者用语义来打破它:
>>> number, pad, rjust, size, kind = 0xABC123EFFF, '0', '>', 42, 'b'
>>> f'{number:{pad}{rjust}{size}{kind}}'
'001010101111000001001000111110111111111111'
答案很长:
你实际上说的是你有一个十六进制表示的值,并且你想用二进制表示一个等价的值。
等价值是一个整数。 但是你可以从一个字符串开始,要以二进制形式查看,你必须以字符串结尾。
将十六进制转换为二进制,42位和前导零?
我们有几种直接的方法可以实现这一目标,而无需使用切片。
首先,在我们可以完成任何二进制操作之前,转换为int(我假设这是一个字符串格式,而不是文字):
>>> integer = int('ABC123EFFF', 16)
>>> integer
737679765503
或者我们可以使用以十六进制形式表示的整数文字:
>>> integer = 0xABC123EFFF
>>> integer
737679765503
现在我们需要用二进制表示来表示整数。
使用内置函数,int.to_bytes
然后传递给int.to_bytes:
>>> format(integer, '0>42b')
'001010101111000001001000111110111111111111'
这使用格式规范的迷你语言。
为了打破这一点,这是它的语法形式:
[[fill]align][sign][#][0][width][,][.precision][type]
为了使其符合我们的