在Python中,在128位输入的32位之后分割每一个

2024-04-20 00:11:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Python中进行128位操作,将128位拆分为32位

var = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF # var may take any value from 0x0 to  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

我试过了

^{pr2}$

但是没有内置的长度运算符来查找long变量的长度。我研究了位数组模块,我不想在我的代码中使用位数组,有什么用python的方式吗?在

预期输出为[0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF]。在


Tags: 模块to代码fromvaluevarany运算符
2条回答

您可以使用位移位(>>)和位与(&):

In [10]: [(i >> x) & 0xFFFFFFFF for x in reversed(range(0, 128, 32))]
Out[10]: [4294967295, 4294967295, 4294967295, 4294967295]

其中i是整数。结果列表将有4个元素(因为128/324)。在

在您的例子中,结果是4个相等的数字(4294967295,因为4294967295是十六进制中的0xFFFFFFFF)。在

对于已知数量的位(32),这很有效,但我宁愿使用helper函数(遵循与上述相同的逻辑):

^{pr2}$

实际操作:

In [14]: split_bits(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 32)
Out[14]: [4294967295, 4294967295, 4294967295, 4294967295]

In [15]: [format(i, 'X') for i in _] # show corresponding hex representations
Out[15]: ['FFFFFFFF', 'FFFFFFFF', 'FFFFFFFF', 'FFFFFFFF']

In [16]: split_bits(0b1000100110101011, 4)
Out[16]: [8, 9, 10, 11]

In [17]: [format(i, 'b') for i in _] # show corresponding binary representations
Out[17]: ['1000', '1001', '1010', '1011']

用数字工作比用数字更好

var = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[(var & (0xFFFFFFFF << 32*i)) >> (32*i) for i in range(4)]

最终你可以把数字转换成字符串的十六进制表示

^{pr2}$

相关问题 更多 >