7

2つの16進文字列がありXORます。それらの間で操作を行う必要があります。

私のヘキサストリングのように、

 a = "1A6F2D31567C80644A5BEF2D50B986B";
 b = "EF737F481FC7CDAE7C8B40837C80644";

それらの間でXOR演算を行う方法は?そのためのガイドラインを教えていただけますか?

4

3 に答える 3

12

それはどのベースでも機能します:

>> (a.to_i(16) ^ b.to_i(16)).to_s(16) 
=> "f51c527949bb4dca36d0afae2c39e2f"

ただし、16 進文字列にはString#hexを使用できます。

于 2012-09-08T14:35:03.987 に答える
9
a = "1A6F2D31567C80644A5BEF2D50B986B"
b = "EF737F481FC7CDAE7C8B40837C80644"
a.hex ^ b.hex
#or (a.hex ^ b.hex).to_s(16)
于 2012-09-08T14:56:32.887 に答える
2

特に質問はしていませんが、先行ゼロをパディングして、出力文字列を入力文字列と同じ長さにしたい場合があります。したがって、steenslagの巧妙な答えに基づいて構築します(そして潜在的な問題を説明するために入力値を調整します):

a = "14ef"
b = "1ca3"
(a.hex ^ b.hex).to_s(16)
# "84c"
(a.hex ^ b.hex).to_s(16).rjust(a.length, '0')
# "084c"
于 2013-11-21T22:00:33.273 に答える