MATLAB中字符和字符串操作

Matlab 中的字符(char)和字符串(string)_matlab char转字符串-CSDN博客

字符和字符串相互转,很多时候还是需要的。如下面的代码,需要判断一系列ASCII码,其实是判断字符串,首先fread读到的是数组型,经dec2hec转字符数组,还需要string转字符串型,才更好判断,当然用字符数组也可以判断。

close all,clear,clc

 
% PATH= 'C:\Users\User\Downloads\'; % path, where data are saved
PATH='data\';
NPD_filename= 'ESTBC001.NPD';      % header-file in text format
signald= fullfile(PATH, NPD_filename);

%% 标准数据头判断%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 以字节读取文件
fid=fopen(signald,'r');
A = fread(fid, inf,  'uint8')';  %
%  x=fscanf(fid2,'%g');  %
fclose(fid);

B = dec2hex(A);
for i=1:518  % 文件头518个字节,其实不用判断到518个
%     % 解析每包数据有多少个数据点,即recordingPeriodTicks
%     % if( string(B(i,:)) == '67'&&string(B(i+1,:)) == '50'&&string(B(i+2,:)) == '65'&&string(B(i+3,:)) == '72'&&string(B(i+4,:)) == '69'&&string(B(i+5,:)) == '6F'...,
%         &&string(B(i+6,:)) == '64'&&string(B(i+7,:)) == '54'&&string(B(i+8,:)) == '69'&&string(B(i+9,:)) == '63'&&string(B(i+10,:)) == '6B'&&string(B(i+11,:)) == '73' )
%     bit1 = char(  hex2dec( B(i+13,:) )   );  
%     bit2 = char(  hex2dec( B(i+14,:) )  );  
%     bit3 = char(  hex2dec( B(i+15,:) )  );  
%     bit4 = char(  hex2dec( B(i+16,:) )  );  
%     recordingPeriodTicks = str2num( [bit1 bit2 bit3 bit4] );
% end   
% 解析采样数据点数参数,即numEcgSamples
if( string(B(i,:)) == '6E'&&string(B(i+1,:)) == '75'&&string(B(i+2,:)) == '6D'&&string(B(i+3,:)) == '45'&&string(B(i+4,:)) == '63'&&string(B(i+5,:)) == '67'...,
        &&string(B(i+6,:)) == '53'&&string(B(i+7,:)) == '61'&&string(B(i+8,:)) == '6D'&&string(B(i+9,:)) == '70'&&string(B(i+10,:)) == '6C'&&string(B(i+11,:)) == '65'&&string(B(i+12,:)) == '73' )
    bit1 = char(  hex2dec( B(i+14,:) )   );  
    bit2 = char(  hex2dec( B(i+15,:) )  );  
    bit3 = char(  hex2dec( B(i+16,:) )  );  
    bit4 = char(  hex2dec( B(i+17,:) )  );  
    numEcgSamples = str2num( [bit1 bit2 bit3 bit4] );
    break;
end       
end

%% 重新以双字节读取文件
clear A;clear B;
fid=fopen(signald,'r');
A = fread(fid, inf,  'uint16')';  %
%  x=fscanf(fid2,'%g');  %
fclose(fid);

B = dec2hex(A);

% 每两个028F之间取数据,拼接成采样数组。第一个头和第二个头之间不是数据。
% 只考虑028F是简化方法,因为文件头起始也是028F(实际是02 8F 00 02 00 01),数据最后也有一个028F(实际是02 8F 00 00 01 01)
% 实际的数据头是02 8F 00 01 00 02,也可用标准数据头判断
%% 简化方法判断%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bgn_pos_buf = [];
C = [];
for i=1:length(B)
    if( B(i,1)=='0'&&B(i,2)=='2'&&B(i,3)=='8' &&B(i,4)=='F' )
        i
        bgn_pos_buf = [bgn_pos_buf i];
        if(length(bgn_pos_buf)>2)  %
            C = [ C; B(bgn_pos_buf(end-1)+3:bgn_pos_buf(end)-1,:) ];
        end
    end
end

%% 数据
D = hex2dec(C);
if(length(D)==numEcgSamples)  % 验证数据个数是否正确
    clc;
    fprintf("截取的数据个数和文件头中解析出个数:----对上----\n");
%     disp("get data OK!");
    plot(D);
else
    D = D(1:numEcgSamples);
    clc
    fprintf("截取的数据个数和文件头中解析出个数:----没对上----\n");
    plot(D);
end

zhh =1;

你可能感兴趣的:(MATLAB,C/C++,matlab,开发语言)