【问题标题】:Importing HEX and Text data from one file into Matlab将 HEX 和文本数据从一个文件导入 Matlab
【发布时间】:2013-07-02 03:41:04
【问题描述】:

我正在尝试读取包含十六进制数据和文本组合的 txt 文件。我想将十六进制转换为十进制,然后进行操作。这是一些示例数据。

x 0:47950 0x---- 0x---- 001:00:07:56.633300 9-R-04-04 0x8000 0x0012 0x0000 0x0000

x 0:136994 0x---- 0x---- 001:00:13:14.350422 8-R-05-04 0x8000 0x0012 0x0000 0x0000

x 0:532637 0x---- 0x---- 001:00:40:29.861743 7-R-06-04 0x8000 0x0012 0x0000 0x0000

前四列在这里有点用处('x 0:47950 0x---- 0x----'),但时间戳、标签 (9-R-04-04) 和十六进制是我的想看看。任何有关如何让 Matlab 读取此数据并将十六进制转换为十进制的帮助将不胜感激。

【问题讨论】:

标签: matlab text hex


【解决方案1】:
% open and read the entire file
fid = fopen('temp.txt');
A = fread(fid);
fclose(fid);
% convert to text strings
txt = char(A)';
% create a cell array of lines
regexp(txt,'\n','split')
lines = regexp(txt,'\n','split');
% match the desired text
desTextCell = regexp(lines,'\d{3}:.+','match');
out = cellfun( @(x) regexp(x,'\s','split'), desTextCell);
out =
   {1x1 cell}    {1x1 cell}    {1x1 cell}     {}
out{1}{:}

ans = 

  Columns 1 through 5

    '001:00:07:56.633300'    '9-R-04-04'    '0x8000'    '0x0012'    '0x0000'

  Columns 6 through 7

    '0x0000'     ''

您需要过滤掉空单元格,对其进行重塑等,但这对您来说是一个快速而肮脏的解决方案。

【讨论】:

  • 感谢各位的帮助!但由于某种原因,上述解决方案的这一部分对我不起作用:out = {1x1 cell} {1x1 cell} {1x1 cell} {} out{1}{:}
【解决方案2】:

您可以使用fscanf() 导入所有内容,只要标签为固定宽度(此处为 9 个字符)。我跳过前 4 个字符串,然后导入以毫秒为单位的时间戳分隔天(?)、小时、分钟、秒(这样您可以将其提供给 datenum),然后导入映射到 ASCII 的标记的 9 个字符位置,最后是四个十六进制数字:

fid  = fopen('test.txt');
data = fscanf(fid, '%*s %*s %*s %*s %f:%f:%f:%f %s %x %x %x %x',[17,inf])';
fclose(fid);
tag = cellstr(char(data(:,5:13)));

注意,你一共有17个字段,4个时间戳,9个'chars'标签和4个十六进制数字,但是你可以在将data中的标签对应的数字转换为一个细胞串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多