将十六进制数组转换为二进制,然后再转换为十进制

Converting a hexadecimal array into Binary and then into Decimal

我有一个包含两组数据的示例结构。第一个数据包含以下十六进制数组 '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');

任何帮助将不胜感激!

添加 2 行应该可以解决问题:

 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 中执行此操作。