如何在Python中异或两个字符串

2024-04-19 12:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

H,我试图在Python中对两个字符串(应该先变成十六进制)进行异或运算。 我知道有一种方法是可行的:

def xor_two_str(str1, str2):
    return hex(int(str1,16) ^ int(str2,16))

但我尝试过这样的事情:

def change_to_be_hex(str):
    return hex(int(str,base=16))
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")

这将返回类型错误:^不应在str,str之间使用。 我不知道为什么。

而且这个功能也不起作用:

bcd = change_to_be_hex("12ef")
def increment_hex(hex_n):
   return hex_n + 1
result = increment_hex(bcd)
print result

错误消息是:TypeError:无法连接“str”和“int”对象 我觉得这太奇怪了

谢谢你!


Tags: toreturndef错误bechangeintprint
2条回答

嗨, 下面的函数返回hex()的结果,其中returns a string

def change_to_be_hex(str):
    return hex(int(str,base=16))

应该对整数使用^运算符。

def change_to_be_hex(str):
    return int(str,base=16)

def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")

我不确定这就是你要找的结果。如果要将两个字符串进行异或,则表示要将一个字符串的每个字符与另一个字符串的字符进行异或。然后应该将每个char或str1的ord()值与str2的每个char的ord()值进行异或。

def xor_two_str(a,b):
    xored = []
    for i in range(max(len(a), len(b))):
        xored_value = ord(a[i%len(a)]) ^ ord(b[i%len(b)])
        xored.append(hex(xored_value)[2:])
    return ''.join(xored)

print xor_two_str("12ef","abcd")

或一行:

def xor_two_str(a,b):
    return ''.join([hex(ord(a[i%len(a)]) ^ ord(b[i%(len(b))]))[2:] for i in range(max(len(a), len(b)))])

print xor_two_str("12ef","abcd")

hex返回一个字符串,因此您试图将两个字符串进行异或。

def change_to_be_hex(str):
   return int(str,base=16)

应该解决这个问题。

相关问题 更多 >