python - 在python 2.7中将三个32位整数打包成80位二进制数

标签 python

我在 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/

相关文章:

python:字典键作为行索引,值作为列标题。如何使用字典引用并选择 df 中的特定值?

python - 改变分解分布以匹配更多的聚合水平分布

python - 得到 IndexError 时使数组重复

python - Django 信号未接收/工作

python - 打开带有明确 header 的 Firefox

python : How to load column from multiblock csv tables?

python - 正则表达式 - 检索分隔符之间的文本

python - 'if q and r:'是单独求值的吗?

python - 为多个机器人加载齿轮

python - 卡住脚本中的多处理 python