2

Python(2.7.3バージョン)でどのように機能するかを理解してくれる人はいますか?

たとえば、2 つの 16 進文字列があります

a='5f70a65ac'
b='58e7e5c36'

どうすれば適切にxorできますか?

私はそのようなものを使用しようとしhex (0x5f0x70 ^ 0x580xe70)ましたが、うまくいきません

4

2 に答える 2

7

文字列を整数に変換してから数学を実行してから、文字列に戻します。

print "%x" % (int(a, 16) ^ int(b, 16))

ここでは、最初に追加するの%ではなく、文字列に戻すためにhex()使用しています (値が長整数の場合は最後に)。それらを取り除くことはできますが、そもそもそれらを生成しない方が簡単です。hex()0xL

最初に 16 進リテラルとして記述することもできます。

a=0x5f70a65ac
b=0x58e7e5c36
print "%x" % (a ^ b)

ただし、それらをファイルから読み取ったり、ユーザーなどから取得したりする場合は、最初のアプローチが必要です。

于 2012-11-12T16:18:39.510 に答える
1
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")

現在、これは同じ長さの文字列でのみ機能しますが、任意の長さの文字列で機能するように簡単に拡張できます。

于 2012-11-12T16:23:37.883 に答える