1

このコーディングにエラーがある理由がわかりません:

hex_str1 = '5'
bin_str1 = dec2bin(hex2dec(hex_str1))
hex_str2 = '4'
bin_str2 = dec2bin(hex2dec(hex_str2))
c=xor(bin_str1,bin_str2)

xor 関数を使用して 16 進数を 2 進数に変換すると、c の値は正しくありませんが、配列を使用すると、c の値は正しいです。コーディングは次のとおりです。

e=[1 1 1 0];
f=[1 0 1 0];
g=xor(e,f)

hec からバイナリ値への xor への最初のコーディングの間違いは何ですか?? 誰かが解決策を見つけるのを手伝ってくれます...

4

2 に答える 2

2

あなたの間違いはxor、実際の数値配列ではなく、2 つの文字列に適用することです。

コマンドの場合xor、論理「0」は実際のゼロ要素で表されます。ゼロ以外の要素は、論理「1」として解釈されます。

2 つの文字列に適用する場合xor、各文字 (要素) の数値はその ASCII 値です。xorの観点からは、文字列内のゼロは実際にはゼロではなく、単にゼロ以外の値 (文字「0」の ASCII 値に等しい) であり、論理的な「1」として解釈されます。肝心なのは、あなたの例では 111 bと 111 bを xorしているので、結果は 0 です。

解決策は、文字列を論理配列に変換することです。

num1 = (bin_str1 == '1');
num2 = (bin_str2 == '1');
c = xor(num1, num2);

結果を (2 進数の) 文字列に変換するには、次のようにします。

bin_str3 = sprintf('%d', c);

...そして16進数の文字列に、これを追加します:

hex_str3 = dec2hex(bin2dec(bin_str3));
于 2013-04-22T16:02:46.747 に答える
0

それは本当に役に立ち、matlabでHMAC値を形成するときに正しい変換を教えてくれます...しかし、matlabではbin2dec()関数を使用して52文字を超える長さの文字列を変換することはできず、同様にhex2dec()は16進数の文字列を取ることができません13以上の長さ。

于 2014-08-01T07:10:10.377 に答える