1. ホーム
  2. python

[解決済み】Pythonで2つの文字列をXORする方法

2022-02-17 10:42:14

質問

H、Pythonで2つの文字列(先に16進数になるはず)をXORしようとしています。 私は1つの方法が動作することを知っています。

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

しかし、私はこのようなsthを試してみました。

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: cannot concatenate 'str' and 'int' objects なんか変な感じ:(

ありがとうございました。

解決するには?

こんにちは。 次のような関数が結果を返しています。 hex() どの は文字列を返します。 .

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

を使用する必要があります。 ^ 演算子で整数を処理します。

def change_to_be_hex(s):
    return int(s,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")

でも、それがあなたの求めている結果かどうかはわかりません。もしあなたが2つの文字列をXORしたいのなら、それは一方の文字列の各文字をもう一方の文字列の文字とXORしたいことを意味します。そうすると、XORは {コード の値は、各charまたはstr1の ord()

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")