gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:11:32 25 4
gpt4 key购买 nike

我试图提取这个十六进制值的最后 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

请注意,您可以在异或之后进行屏蔽(按位保存一位与运算),因为通过屏蔽,您无论如何都可以将这些较高的值设置为零。所以你可以提高效率,例如:

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'

关于从 32 个字符中提取最后 16 个字符的 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42858964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com