我有一个十六进制值的列表,我需要将每个元素移位9,然后将结果与另一个列表合并。 我在下面提供了一个我尝试的例子。
x = [hex(10), hex(11)]
y = x[0] << 1
结果出现了一个错误。
TypeError: unsupported operand type(s) for <<: 'str' and 'int'.
虽然下面的代码和我一样工作,但返回的是一个 int
x = [0xa, 0xb]
y = x[0] << 1
我的问题是,如何才能让第一个代码示例工作?
我知道列表返回的是一个字符串而不是一个int。 我试着输入从字符串到十六进制的转换,但这导致了一个错误。 然后我又尝试将字符串转为int再转为hex,结果在str转int的过程中出现了错误。
我需要将结果以十六进制的形式存储在列表中,因此将列表改为整数对我来说是行不通的。
你可以使用以下方法将十六进制字符串转换为整数。
int(hex(10), base=16)
但这只会返回10。
如果你有一个整数列表,我会先将它们移位到你需要移位的数量,然后使用 hex
. 十六进制和其整数的值是一样的,例如 0xa == 10
是 True
. 但是... hex(10)
返回一个字符串。
所以
nums = [10, 11, ...]
nums = [x << 9 for x in nums]
hex_nums = map(hex, nums)
或类似的东西。
最好的方法是使用基数为16的构造函数'int'将十六进制值转换为整数,然后使用位元运算符
a=hex(10)
b=hex(11)
x = [int(a,16),int(b,16)]
y = x[0] << 1
print(x)
print(y)