我试图在Python中进行128位操作,在32位之后将128位分割
var = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF # var may take any value from 0x0 to 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
我试过了
n = 8 # for 32 bit splitting
[var[i:i+n] for i in range(0, len(var), n)]
但是没有内置的长度运算符来查找long
变量的长度。我研究了bitarray模块,我不想在我的代码中使用位数组,有什么东西用pythonic方式吗?
预期输出为[0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF]
。
答案 0 :(得分:4)
您可以使用位移(Call
)和按位AND(>>
):
&
其中In [10]: [(i >> x) & 0xFFFFFFFF for x in reversed(range(0, 128, 32))]
Out[10]: [4294967295, 4294967295, 4294967295, 4294967295]
是你的整数。结果列表将包含4个元素(因为 128/32 4 )。
在你的情况下,结果是4个相等的数字( 4294967295 ,因为 4294967295 是 0xFFFFFFFF 的十六进制)。
这适用于已知的位数(32),但我更倾向于使用辅助函数(遵循与上面相同的逻辑):
i
行动中:
def split_bits(value, n):
''' Split `value` into a list of `n`-bit integers '''
mask, parts = (1 << n) - 1, []
parts = []
while value:
parts.append(value & mask)
value >>= n
parts.reverse()
return parts
答案 1 :(得分:0)
使用数字而不是搅拌更好
var = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[(var & (0xFFFFFFFF << 32*i)) >> (32*i) for i in range(4)]
最终你可以将数字转换为字符串十六进制表示
format(n, 'x')