问题:我想获得
(7,5,3) => 000001110000010100000011 => 460035
also the converse, i.e.,
460035 => 000001110000010100000011 => (7,5,3)
这是我尝试过的程序:
L=(7,5,3) # here L may vary each time.
a=0
for i in range(3):
a=bin(a << 8) ^ bin(L[i])
print a
但是它给出了错误TypeError: unsupported operand type(s) for ^: 'str' and 'str'
我该怎么办?
答案 0 :(得分:2)
无需重新发明轮子。如果您在注释中看到了我提供的文档链接,则可以在其中找到以下有用的方法:int.from_bytes
和int.to_bytes
。我们可以这样使用它们:
input = (7, 5, 3)
result = int.from_bytes(input, byteorder='big')
print(result)
>>> 460035
print(tuple(result.to_bytes(3, byteorder='big')))
>>> (7, 5, 3)
答案 1 :(得分:0)
您应该对数字而不是转换后的字符串执行位运算:
L=(7,5,3)
a=0
for i in L:
a <<= 8
a |= i
print(bin(a), a)
这将输出:
0b1110000010100000011 460035
冲销:
a = 460035
L = []
while True:
L.append(a & 0xff)
a >>= 8
if not a:
break
L = tuple(L[::-1])
print(L)
这将输出:
(7, 5, 3)