如何将前导"0x"的混合双精度和十六进制的单元格数组转换为双精度的二维数组?

Col*_*lez 1 csv arrays matlab parsing cells

我的目标是将包含数字列和十六进制列混合的制表符分隔数据集解析为双矩阵,其中所有值都已转换为浮点数.

我在Matlab工作.我有一个制表符分隔文件,包含数字列和十六进制列的混合,例如:

 A | B | C |     D
---|---|---|-----------
0x3|  1|  2| 0x118c0832
---|---|---|-----------
0x3|  3|  4| 0x118c0832
---|---|---|-----------
0x3|  5|  6| 0x118c0832
---|---|---|-----------
0x3|  7|  8| 0x118c0832
Run Code Online (Sandbox Code Playgroud)

为了解析数据,我使用了textscan()这样的函数(为简单起见,我们将跳过标题的提取并假装文件从第2行开始):

fileID = fopen('data.dat');
formatString = '%s %f %f %s';
data = textscan(fileID,formatString);
Run Code Online (Sandbox Code Playgroud)

注意:textscan()不接受十六进制转换字符%x.

此时,我留下了1x4单元阵列,data其中data{1,3}对应于包含C列内容的4x1单元阵列,即: data{1,3} == {2; 4; 6; 8}.

一旦所有值都是数值,就可以data = cell2mat(data)将我的数据简单地转换为所需的4x4数组; 但是,由于领先优势,我正在努力寻找将十六进制单元格转换为浮点数的最简单,最快捷的方法'0x'.

我已经尝试使用的组合放在一起的东西regexp()hex2dec(),但是这通常涉及到创建越来越多的电池阵列,因此任何解决方案似乎令人费解.

有任何想法吗?

gno*_*ice 6

您可以删除0x调用中的内容,textscan如下所示:

fileID = fopen('data.dat');
formatString = '0x%s %f %f 0x%s';
data = textscan(fileID,formatString);
Run Code Online (Sandbox Code Playgroud)

然后使用hex2dec(对于整数结果)或hex2num(对于双精度浮点结果)转换列:

data{1} = hex2dec(data{1});
data{4} = hex2dec(data{4});
data = [data{:}];
Run Code Online (Sandbox Code Playgroud)

结果如下:

data =

           3           1           2   294389810
           3           3           4   294389810
           3           5           6   294389810
           3           7           8   294389810
Run Code Online (Sandbox Code Playgroud)