Python(2.7.3バージョン)でどのように機能するかを理解してくれる人はいますか?
たとえば、2 つの 16 進文字列があります
a='5f70a65ac'
b='58e7e5c36'
どうすれば適切にxorできますか?
私はそのようなものを使用しようとしhex (0x5f0x70 ^ 0x580xe70)
ましたが、うまくいきません
文字列を整数に変換してから数学を実行してから、文字列に戻します。
print "%x" % (int(a, 16) ^ int(b, 16))
ここでは、最初に追加するの%
ではなく、文字列に戻すためにhex()
使用しています (値が長整数の場合は最後に)。それらを取り除くことはできますが、そもそもそれらを生成しない方が簡単です。hex()
0x
L
最初に 16 進リテラルとして記述することもできます。
a=0x5f70a65ac
b=0x58e7e5c36
print "%x" % (a ^ b)
ただし、それらをファイルから読み取ったり、ユーザーなどから取得したりする場合は、最初のアプローチが必要です。
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")
現在、これは同じ長さの文字列でのみ機能しますが、任意の長さの文字列で機能するように簡単に拡張できます。