Python 从 32 个字符中提取最后 16 个字符的代码

Python code to extract last 16 characters from 32 characters

我正在尝试提取此十六进制值的最后 16 个字符,并使用 python 代码将其与相同 32 个字符或 128 位值的前 16 位异或。我不确定这里要使用什么功能。我试着把它当作一个字符串,将长度除以一半,然后对这两个值进行异或运算。有没有一种可能很简单的方法来找到提取这些位并对它们进行异或运算?

例如我的 32 位值是:ee230c06cac0aa070be45290b1cb11ee

我最后的 16 位值应该是:0be45290b1cb11ee;和
我的第一个 16 位值应该是:ee230c06cac0aa07

Note: based on your example you work with a 128-bit number, and you want to split it into two 64-bit numbers. The below stated techniques can however easily be modified for any number of bits.

为了得到最低16位,可以用0xffff掩码,如:

lowest_16 = number <b>& 0xffff</b>

现在,为了获得 最高的 16 位,您可以移位 (可能还有更好的掩码,因为在 中数字具有任意长度):

highest_16 = (number <b> >> 16 ) & 0xffff</b>
#                     ^       ^ masking out higher bits
#                     | bitwise shift 16 position to the right

所以结果是:

result = ((number >> 16 ) & 0xffff) <b>^</b> (number & 0xffff)
#                                   ^ bitwise xor operation

请注意,您可以在 xor 之后 mask(保存一个位和操作),因为通过屏蔽,您无论如何都将这些较高的值设置为零。所以你可以让它更有效率,比如:

result = ( (number >> 16 ) <b>^</b> number) & 0xffff

如果您想使用 128 位数字,您可以使用:

result_128 = ( (number >> 64 ) <b>^</b> number) & 0xffffffffffffffff
#                                          ^ 64-bit mask

例如:

>>> number = 0xee230c06cac0aa070be45290b1cb11ee
>>> hex(( (number >> 64 ) ^ number) & 0xffffffffffffffff) # xor-ing
'0xe5c75e967b0bbbe9'
>>> hex(number >> 64) # highest bits
'0xee230c06cac0aa07'
>>> hex(number & 0xffffffffffffffff) # lowest bits
'0xbe45290b1cb11ee'