2013-04-22 98 views
1

我DONOT知道为什么会出现错误在这种编码:两个数字之间的XOR(十六进制到二进制转换后)

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的值不正确function.but当我用数组c的值是correct.the编码是

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

什么是我的第一个编码来的HEC为二进制值XOR错误??有人能帮助我找到解决方案。 ..

回答

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)); 
+0

然后,如何修改两个字符串之间的xor编码? – 2013-04-22 16:08:07

+1

yess ..它的正确.. c的值是正确的...非常感谢你... – 2013-04-22 16:21:31

+0

@ellahFaris很高兴帮助:) – 2013-04-22 16:26:56

0

它是真正有用的,并给我正确的转换而形成的matlab HMAC值... 但在MATLAB使用BIN2DEC你不能转换长度的字符串超过52个字符()函数,同样HEX2DEC( )不能取长度超过13的十六进制字符串。

相关问题