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")
这将返回TypeError:^不应该在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'对象 我觉得这很奇怪:(
谢谢!
答案 0 :(得分:1)
hex
返回一个字符串,所以你试图xor两个字符串。
def change_to_be_hex(str):
return int(str,base=16)
应该解决这个问题。
答案 1 :(得分:1)
您好,
以下函数返回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")
答案 2 :(得分:0)
当您最初返回十六进制时,就像在change_to_be_hex
中一样,您明确地将其转换为int
。您需要在整个代码中执行此操作以向其添加内容 - 因此,请将increment_hex
更改为:
return (int(hex_n) + 1)