2

有人可以帮助了解它在 python(2.7.3 版本)中的工作原理吗?

例如,有两个十六进制字符串

a='5f70a65ac'
b='58e7e5c36'

我怎样才能正确地异或?

我尝试使用类似的东西hex (0x5f0x70 ^ 0x580xe70),但它不起作用

4

2 回答 2

7

在尝试对其进行数学运算之前将字符串转换为整数,然后再转换回字符串。

print "%x" % (int(a, 16) ^ int(b, 16))

我在%这里使用转换回字符串,而不是hex()因为hex()添加0x到开头(L如果值是长整数,则添加到结尾)。你可以把它们去掉,但更容易一开始就不生成它们。

您也可以首先将它们写为十六进制文字:

a=0x5f70a65ac
b=0x58e7e5c36
print "%x" % (a ^ b)

但是,如果您是从文件中读取它们或从用户那里获取它们或其他方式,那么第一种方法就是您需要的。

于 2012-11-12T16:18:39.510 回答
1
a = '5f70a65ac'
b = '58e7e5c36'
h = lambda s: ('0' + s)[(len(s) + 1) % 2:]
ah = h(a).decode('hex')
bh = h(b).decode('hex')
result = "".join(chr(ord(i) ^ ord(j)) for i, j in zip(ah, bh)).encode("hex")

Currently, this only works with equally-lengthed strings, but can easily extended to work with arbitrary-lengthed ones.

于 2012-11-12T16:23:37.883 回答