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 函数将十六进制转换为二进制时,c 的值不正确。但是当我使用数组时,c 的值是正确的。编码是

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

我第一次将 hec 异或到二进制值的错误是什么?任何人都可以帮我找到解决方案...

4

2 回答 2

2

您的错误是应用于xor两个字符串而不是实际的数字数组。

对于xor命令,逻辑“0”由实际的零元素表示。任何非零元素都被解释为逻辑“1”。

当你应用于xor两个字符串时,每个字符(元素)的数值就是它的 ASCII 值。从xor的角度来看,字符串中的零并不是真正的零,而只是非零值(等于字符 '0' 的 ASCII 值),它们被解释为逻辑“1”。底线是,在您的示例中,您对 111 b和 111 b进行异或运算,因此结果为 0。

解决方案是将字符串转换为逻辑数组:

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

要将结果转换回字符串(二进制数),请使用以下命令:

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

...并在十六进制字符串中添加:

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

这真的很有帮助,并且在 matlab 中形成 HMAC 值时给了我正确的转换......但是在 matlab 中,您不能使用 bin2dec() 函数转换长度超过 52 个字符的字符串,同样 hex2dec() 不能采用十六进制字符串长度超过 13。

于 2014-08-01T07:10:10.377 回答