【问题标题】:Converting a hexadecimal array into Binary and then into Decimal将十六进制数组转换为二进制,然后再转换为十进制
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2016-08-28
    • 2013-07-25
    相关资源
    最近更新 更多