-2

我在关于 Python 的 Visual Studio 上工作。我有一个十六进制输入,如下所示:

0110

我将此十六进制数字转换为二进制,它看起来像:

00000001 0001000

过了一会儿,我想创建一个动态数组以将这些值保存在数组中并根据给定的输入更改大小,例如它可以是01100c并且数组大小将增加到 3。所以,我使用以下代码:

dynamic_arraylist = [ ]
print("Enter a hex for converting binary");
hexdec = input("Enter any number in Hexadecimal form: ");
bin_value = bin(int(hexdec,16))[2:]
bin_value = (8 - (len(bin_value)% 8)) * '0' + bin_value
bytes = [bin_value[i:i+8] for i in range(0, len(bin_value), 8)]
' '.join(bytes) 
number_length = len(' '.join(bytes))
elements = ' '.join(bytes) 


for i in range(number_length):
    data = int(elements)
    dynamic_arraylist.append(data)

但是,由于data = int(elements)这行代码,我得到一个错误,它可能不理解我的代码,并且它给出了一个错误:

ValueError("invalid literal for int() with base 10

有没有办法解决这个问题?

4

2 回答 2

1

我在这里总结讨论,因为它变得有点冗长。基本上你想要的是用户输入一个应该被解释为许多 2 位十六进制值的数字。例如:

0110

应解释为:

0x01
0x10

为了做到这一点,我首先将您的输入字符串拆分为一个 2 位字符串数组。然后我将转换每个元素并将其附加到您的二进制元素数组中:

strArray = [hexdec[idx:idx+2] for idx in range(len(hexdec)) if idx%2 == 0]

for elem in strArray:
    bin_value = bin(int(elem,16))[2:]
    bin_value = (8 - (len(bin_value)% 8)) * '0' + bin_value    
    dynamic_arrayList.append(bin_value)

当用户输入时,0110会产生:

['00000001', '00010000']
于 2018-10-10T08:41:28.847 回答
0

int()构造函数不接受带空格的字符串,所以你应该没有空格join

改变:

number_length = len(' '.join(bytes))
elements = ' '.join(bytes) 

至:

number_length = len(''.join(bytes))
elements = ''.join(bytes) 
于 2018-10-10T07:29:34.260 回答