我有一个包含两组数据的样本结构。第一个数据包含以下十六进制数组'00 7F 3F FF 08 FF 60 26',然后当我将其转换为二进制然后是十进制时,我得到了正确的答案,即'0 127 63 255 8 255 96 38'。
但是,我有一些数据数组与第一个数组不完全一样,它们看起来像是“ 1 40 0 F 00 40 00 47”,当我尝试转换这类数据集时,结果不准确。我得到类似“ 64 0 64 0 71”的内容,而预期结果是“ 1 64 0 15 0 64 0 71”。
这是我的示例数据代码:
%% Structure
a(1).Id = 118;
a(1).Data = '00 7F 3F FF 08 FF 60 26';
a(2).Id = 108;
a(2).Data = '1 40 0 F 00 40 00 47';
%% Hexadecimal (Data) --> Binary --> Decimal
Data = a(2).Data;
str = regexp(Data,' ','split');
Ind = cellfun(@length,str);
str = str(Ind==2);
%Hex to Binary
binary = hexToBinaryVector(str,8,'MSBFirst');
%Binary to Decimal
Decimal = bi2de(binary,'left-msb');
任何帮助将不胜感激!
添加两行应该可以解决问题:
str = regexp(Data,' ','split');
Ind = cellfun(@length,str);
str(Ind==1) = strcat('0',str(Ind==1) );
Ind = cellfun(@length,str);
str = str(Ind==2);
它所要做的就是在看到一个字符串(您的十六进制)为1个字符时,将其前面放置一个0,因此请将其更正为正确的格式。您实际上可以在cellfun中执行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句