在python 3中将十六进制转换为数组中的bin

时间:2018-10-19 11:32:39

标签: python python-3.x

我正在关于Python项目的Visual Studio上工作。我在项目中都使用了它们(十六进制,十进制,二进制)。这是我的代码的基本示例:

dynamicArrayBin = [ ]
dynamicArrayHex = [ ] 
hexdec = input("Enter the hex number to binary "); 
dynamicArrayHex = [hexdec[idx:idx+2]  for idx in range(len(hexdec)) if idx%2 == 0]
binary = '{:08b}'.format(int(dynamicArrayHex[0] , 16))

因此,当用户输入01进行输入时,代码将给出00000001。 我想将元素0 0 0 0 0 0 0 1的结果分开并放入dynamicArrayBin=[]。 过一会儿,我打电话给dynamicArrayBin=[0]时,它应该显示0

有什么办法吗?

2 个答案:

答案 0 :(得分:2)

如果您想要十六进制输入的二进制数字列表,则无需先将输入分成字节(这是您的代码当前所做的工作,将十六进制输入的每2个字符转换为一个覆盖范围的整数0-255)。

只需将整个十六进制输入转换为整数,然后从那里将其格式化为二进制:

integer_value = int(hexdec, 16)
byte_length = (len(hexdec) + 1) // 2  # to help format the output binary
binary_representation = format(integer_value, '0{}b'.format(byte_length * 8))

binary_representation值是由'0''1'字符组成的字符串,并且由于字符串是序列,因此除非必须能够进行突变,否则无需将其转换为列表单个字符。

所以:

print(binary_representation[0])

工作并打印01

如果必须要有列表,可以使用list(binary_representation))

演示:

>>> hexdec = 'deadbeef'  # 4 bytes, or 32 bits
>>> integer_value = int(hexdec, 16)
>>> byte_length = (len(hexdec) + 1) // 2  # to help format the output binary
>>> binary_representation = format(integer_value, '0{}b'.format(byte_length * 8))
>>> integer_value
3735928559
>>> byte_length
4
>>> binary_representation
'11011110101011011011111011101111'
>>> binary_representation[4]
'1'
>>> binary_representation[2]
'0'
>>> list(binary_representation)
['1', '1', '0', '1', '1', '1', '1', '0', '1', '0', '1', '0', '1', '1', '0', '1', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1']

如果您想要的只是十六进制值的第一位,那么有一种更快的方法:

if len(hexdec) % 2:  # odd number of hex characters, needs a leading 0
    hexdec = '0'     # doesn't matter what the rest of the hex value is
print('1' if hexdec[0].lower() in '89abcdef' else '0')

因为二进制表示形式的前4位完全由第一个十六进制字符确定,并且为十六进制值8F设置了第一位。

答案 1 :(得分:0)

您可以执行以下操作

hexLst = ['ABC123EFFF', 'ABC123EFEF', 'ABC123EEFF']
binLst = [bin(int(n, 16))[2:] for n in hexLst]
print(binLst)

哪个会给你输出

['1010101111000001001000111110111111111111', '1010101111000001001000111110111111101111', '1010101111000001001000111110111011111111']

然后您可以从中列出一个列表

dynamicArrayBin=[list(b) for b in binLst]
print(dynamicArrayBin)

输出

[['1', '0', '1', '0', '1', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'], ['1', '0', '1', '0', '1', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1'], ['1', '0', '1', '0', '1', '0', '1', '1', '1', '1', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1']]