我正在关于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
。
有什么办法吗?
答案 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])
工作并打印0
或1
。
如果必须要有列表,可以使用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位完全由第一个十六进制字符确定,并且为十六进制值8
至F
设置了第一位。
答案 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']]