两个数字之间的xor(十六进制到二进制转换后)

时间:2013-04-22 15:56:41

标签: matlab

我不知道为什么这个编码有错误:

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到二进制值?任何人都可以帮我找到解决方案......

2 个答案:

答案 0 :(得分:2)

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

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

在两个字符串上应用xor时,每个字符(元素)的数值都是其ASCII值。从xor的角度来看,字符串中的零不是真正的零,而只是非零值(等于字符'0'的ASCII值),它们被解释为逻辑“1 “S。底线是你的例子中你是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));

答案 1 :(得分:0)

它真的很有帮助,在matlab中形成HMAC值时给我正确的转换... 但是在matlab中你不能使用bin2dec()函数转换长度超过52个字符的字符串,类似地,hex2dec()不能使用超过13个长度的十六进制字符串。