我在有关 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_valuebytes = [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有没有办法解决这个问题?
2 回答

翻过高山走不出你
TA贡献1875条经验 获得超3个赞
我在这里总结讨论,因为它变得有点冗长。基本上你想要的是用户输入一个应该被解释为许多 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']

呼啦一阵风
TA贡献1802条经验 获得超6个赞
该int()
构造函数不接受字符串用空格,所以你应该join
没有之一。
改变:
number_length = len(' '.join(bytes)) elements = ' '.join(bytes)
至:
number_length = len(''.join(bytes)) elements = ''.join(bytes)
添加回答
举报
0/150
提交
取消