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

问题描述:

我有一个有两组数据的示例结构。第一个数据包含以下十六进制数组:'00 7F 3F FF 08 FF 60 26'然后当我将它转换成二进制,然后小数我得到一个正确的答案是'0 127 63 255 8 255 96 38'将十六进制数组转换为二进制然后转换为十进制

但是,我有一些数据数组并没有像第一个那样完全排列,他们看起来像这样,当我尝试转换这些数据集时,结果不准确。我得到这样的东西'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'); 

任何帮助将非常感激!

+0

为什么中间转换为二进制? – Adriaan

+1

好吧,你得到64 0 64 0 71,因为你正在做'str = str(Ind == 2)',所以只有长度= 2的字符串被输入到hexToBinaryVector。 2你可以考虑的事情,尝试当你将1位数字传入hexToBinaryVector并查看是否有效或在str的左边添加0(Ind == 1) – GameOfThrows

+0

@Adriaan:我需要二进制数据作进一步分析 – user161816

加入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); 

所有它做的是,当它看到一个String(十六进制),即1字符,它把一个0盈方的,所以正确的成它的正确格式。你可以在cellfun中做到这一点。