1

私はオンラインで答えを探しましたが、どれも私のやり方で私の問題を解決していないようです (私は知っています、私はうるさいです:D)。

これが取り引きです:Pythonのデフォルトの整数型は私の目的には十分な長さではないため、2つの16進数を格納するために文字列型を使用しています。たとえば、次のようにします。

S1 = "315c4eeaa8b5f8aaf9174145bf43e1784b8fa00dc71d885a804e5ee9fa40b16349c146fb778cdf2d3aff021dfff5b403b510d0d0455468aeb98622b137dae857553ccd8883a7bc37520e06e515d22c954eba5025b8cc57ee59418ce7dc6bc41556bdb36bbca3e8774301fbcaa3b83b220809560987815f65286764703de0f3d524400a19b159610b11ef3e"
S2 = "234c02ecbbfbafa3ed18510abd11fa724fcda2018a1a8342cf064bbde548b12b07df44ba7191d9606ef4081ffde5ad46a5069d9f7f543bedb9c861bf29c7e205132eda9382b0bc2c5c4b45f919cf3a9f1cb74151f6d551f4480c82b2cb24cc5b028aa76eb7b4ab24171ab3cdadb8356f"

ポイントは、これらは NUMBERS であるはずですが、文字列に格納されているということです。私がやりたいのは、これら 2 つの文字列を数値として扱い、2 つのビット単位の XOR を実行してから、同様の形式 (文字列に格納された 16 進数) で出力を取得することです。

私はプログラミングが初めてで、Pythonも初めてなので、これを行う方法がわかりませんでした。私はスクリプトを探しているだけでなく、それがどのように機能するかを理解したいと思っています.

4

3 に答える 3

2

Pythonは値を数値として保持できます。

証拠としてこれを見て、

>>> hex(int(S1, 16))[2:-1] == S1
True

'0x'最初とL最後から削除して、文字列を調整しているだけです。

あなたの答えのためにあなたがする必要があるのは、

hex(int(S1, 16) ^ int(S2, 16))
于 2013-06-30T07:07:44.777 に答える
1
  1. 両方の文字列を s1_r と s2_r に逆にします
  2. char xor (char1 (s1_r から) xor char2 (s2_r から)) による char の実行
  3. 結果を xor_str に追加
  4. 逆 xor_str
于 2013-06-30T07:06:54.103 に答える
1

長整数であると仮定して XOR 操作を実行するにはlong、Python で型を使用できます。

# Convert the hex string S1 and S2 to longs
l1=long(S1,16) 
l2=long(S2,16)
result=hex(l1 ^ l2) # Convert the XOR of the strings
# Output will be:
# '0x1013abb8b0ead34450ee04e8d507fa16552e5aa9f2cc9551acc9d71b646f8a9b4f3548f2068172b201bf0daf75bdddd0dedd861b9ccbcf7c9ce53e39ecafa9c86880fba0c600778fc7bc6e3bd60c8b0df469f5a7f1da4339f9202bdb43b97b22db69642ce5402b8ce44f86d990dbf5a2L'
于 2013-06-30T07:07:12.573 に答える