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' )ibgn_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,:) ];endend
end%% 数据
D = hex2dec(C);
if(length(D)==numEcgSamples) % 验证数据个数是否正确clc;fprintf("截取的数据个数和文件头中解析出个数:----对上----\n");
% disp("get data OK!");plot(D);
elseD = D(1:numEcgSamples);clcfprintf("截取的数据个数和文件头中解析出个数:----没对上----\n");plot(D);
endzhh =1;