首页 > 解决方案 > python中两个十六进制字符串的异或

问题描述

我有两个字符串值,字符和十六进制等效。我如何对两个字符串进行异或运算,以使结果应采用这种格式“\x00\x01\x...”

其中: String1 和 String2 与对应的 ASCII 值相等

String1 = "abcd"

String2 = "\x61\x62\x63\x64"

String3 = String1 ^ String2

输入:

String1 = "ABC"
String2 = "\x72\x61\x74"

我正在使用以下方法来查找 XOR 值

hex(ord('A')) ^ '\x72' = ??
hex(ord('B')) ^ '\x61' = ??
hex(ord('C')) ^ '\x74' = ??

标签: pythonbitwise-operators

解决方案


我想你在想的是:

String1 = "ABC"
String2 = "\x72\x61\x74"
result = "".join(chr(c1 ^ c2) for c1, c2 in zip(map(ord, String1), map(ord, String2)))
print(result)
# prints "3#7"

或者,如果你想打印十六进制表示,也许:

String1 = "ABC"
String2 = "\x72\x61\x74"
result = "".join("\\x{:02x}".format(c1 ^ c2) for c1, c2 in zip(map(ord, String1), map(ord, String2)))
print(result)
# prints "\x33\x23\x37"

推荐阅读