我在 80 位操作方面遇到一些问题,这很容易解决。 但我缺少基本的东西。这些是我的代码片段
def get32bitNumber():
temp1 = 0b10101010101010101010101010101010101010101010101010101010101010101010101010101010 # 80 bits inputs
''' Split `value` into a list of `3`-bit integers '''
mask, temp2= (1 << 32) - 1, []
temp2= []
while temp1:
temp2.append(temp1& mask)
temp1>>= 32
return temp
if __name__ == "__main__":
aList = []
aList =get32bitNumber()
预期输出:
aList = [0x0000AAAA,0xAAAAAAAA,0xAAAAAAAA] # i want convert aList into expected_output
expected_output = 0xAAAAAAAAAAAAAAAAAAAA # output would be in binary only 0b10101010101010101010101010101010101010101010101010101010101010101010101010101010
这里的问题是列表包含 3 - 32 位数字,这导致 96 位,例如 [32bitNumber1, 32bitNumber2, 32bitNumber3]。我只想要 80 位作为长值的 bin。我研究了,我得到了位数组,但我不使用位数组来做到这一点,我想以Pythonic方式做我怎样才能实现这一点。请帮我解决问题。预先感谢您的帮助。
最佳答案
正如 Kevin 所说,对于任何 3 个 32 位整数,您想要做的事情都是不可能的。如果像您的示例一样,最左边的 16 个二进制数字始终为 0,则预期输出将为 number1*2^64+number2*2^32+number3。为了让它截掉数字 1 的前 16 位,从而保证输出适合 80 位,您需要将上面的答案修改为 2^80。
对于 i,枚举中的值(list_of_inputs[::-1]):
输出+=值*(2**(32*i))
输出=输出%(2**80)
第一行向后迭代数组的元素及其索引(它们在数组中的位置)。向后遍历的原因是第三个元素是您想要的最小的。然后它将输出设置为移位到位的值。最后一行去掉了前 16 位,因此剩下 80 位。
关于python - 在python 2.7中将三个32位整数打包成80位二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32226581/