繁体   English   中英

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

[英]Python code to extract last 16 characters from 32 characters

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

例如,我的32位值为: ee230c06cac0aa070be45290b1cb11ee

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

注意 :根据您的示例,您使用的是128位数字,并且您希望将其拆分为两个64位数字。 然而,以下所述的技术可以容易地针对任意数量的位进行修改。

为了获得最低的16位,可以使用0xffff 进行屏蔽 ,例如:

lowest_16 = number & 0xffff

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

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

所以结果是:

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

请注意,由于可以通过屏蔽将这些较高的值始终设置为零,因此可以在异或后屏蔽 (按位保存1和进行操作)。 因此,您可以使其变得更高效,例如:

result = ( (number >> 16 ) ^ number) & 0xffff

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

result_128 = ( (number >> 64 ) ^ 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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM