我不知道为什么这个编码有错误:
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到二进制值?任何人都可以帮我找到解决方案......
答案 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个长度的十六进制字符串。