将十六进制数组转换为二进制然后转换为十进制
问题描述:
我有一个有两组数据的示例结构。第一个数据包含以下十六进制数组:'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');
任何帮助将非常感激!
答
加入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中做到这一点。
为什么中间转换为二进制? – Adriaan
好吧,你得到64 0 64 0 71,因为你正在做'str = str(Ind == 2)',所以只有长度= 2的字符串被输入到hexToBinaryVector。 2你可以考虑的事情,尝试当你将1位数字传入hexToBinaryVector并查看是否有效或在str的左边添加0(Ind == 1) – GameOfThrows
@Adriaan:我需要二进制数据作进一步分析 – user161816