假设你说的是文本类型的16进制,按数表排列,并且第一列是10进制的时间,代码如下:
function [t,data] = readAscHex(file)
% 输入:
% file — 数据文件,asc编码
% 输出:
% t — 时间
% data - uint8数据
% 编写 : SY
fid = fopen(file);% 打开文件
cellData = textscan(fid,'%f32 %s','headerlines',1,'delimiter','\n');% 读取数据
t = single(cellData{1}); % 第一列是时标
hexData=cellData{2};
fclose(fid); % 关闭文件
idxNAN = find(isnan(t));
t(idxNAN ) =[];
hexData(idxNAN ) = [];
clear('cellData');
hexData = cell2mat(hexData);
hexDataPos = regexp(hexData(2,:),'[0-9,A-F,a-f]'); % 根据第二行学习所有16进制字符位置,当心如果数据中存在不规则行将出错。
hexData = hexData (:,hexDataPos);
nRows = size(hexData,1);
nCols = size(hexData,2)/2;
data = zeros(nRows,nCols,'uint8'); % 预分配输出数据空间,uint8类型
for iCol = 1:nCols
data(:,iCol) = uint8(hex2dec(hexData(:,(2*iCol-1):(2*iCol)))); % 字符型16进制转换成10进制无符号整型
end
该代码段展示了一个MATLAB函数,用于读取包含10进制时间戳和十六进制数据的ASCII文件。它首先读取文件,然后将第一列作为时间数据,其余数据作为十六进制字符串。通过正则表达式定位十六进制字符,将字符串转换为10进制的无符号整数矩阵。这个函数适用于处理特定格式的数据转换任务。
3万+

被折叠的 条评论
为什么被折叠?



