将十六进制数组转换为二进制,然后再转换为十进制
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 中执行此操作。
我有一个包含两组数据的示例结构。第一个数据包含以下十六进制数组 '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 中执行此操作。