【发布时间】:2016-12-25 04:28:17
【问题描述】:
我有一个包含两组数据的示例结构。第一个数据包含以下十六进制数组 '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');
任何帮助将不胜感激!
【问题讨论】:
-
为什么中间转换成二进制?
-
好吧,你得到 64 0 64 0 71 因为你在做
str = str(Ind==2)所以只有长度 = 2 个字符串被输入到 hexToBinaryVector。您可以考虑两件事,尝试将 1 位数字传递到 hexToBinaryVector 并查看是否有效或在 str(Ind == 1) 的左侧添加 0 时会发生什么 -
@Adriaan : 我需要二进制数据进行进一步分析
-
@GameOfThrows:感谢您的输入,但是,我尝试按照您的建议进行操作,但出现以下错误“矩阵尺寸必须一致。”
-
嗯?你试过什么?在你的 str=str(Ind==2) 之前添加
str(Ind==1) = strcat('0',str(Ind==1) )并告诉我你得到了什么
标签: arrays matlab binary hex decimal