[英]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位,可以进行移位 (以及可能更好的掩码,因为在python-3.x中,数字具有任意长度):
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.