当前位置: 首页 > article >正文

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;


http://www.kler.cn/a/145076.html

相关文章:

  • 第11章:根据 ShuffleNet V2 迁移学习医学图像分类任务:甲状腺结节检测
  • 20个整流电路及仿真实验汇总
  • 安卓(android)读取手机通讯录【Android移动开发基础案例教程(第2版)黑马程序员】
  • 智能汽车网络安全威胁报告
  • Linux——网络(tcp)
  • HttpClient学习
  • 【anaconda】numpy.dot 向量点乘小技巧
  • 【机器学习 | 聚类】关于聚类最全评价方法大全,确定不收藏?
  • 【LeetCode:828. 统计子串中的唯一字符 | 贡献法 乘法原理】
  • 十分钟让你搞懂JVM中的GC垃圾回收机制(分代回收)
  • MySQL- 创建可以远程访问的root账户
  • GIT版本控制和常用命令使用介绍
  • Centos开机启动Java程序
  • [架构相关]基础架构设计原则
  • openEuler Linux 部署 FineBi
  • Spark-06:共享变量
  • Redis-缓存设计
  • c++[string实现、反思]
  • STM32 寄存器配置笔记——USART配置中断接收乒乓缓存处理
  • 针对哈希冲突的解决方法
  • Java网络爬虫实战
  • 嵌入式的学习需要合理规划时间
  • 基于单片机的温湿度检测系统设计
  • Kafka-TopicPartition
  • 适用于 Mac 和 Windows 的顶级U 盘数据恢复软件
  • 如何对销售团队建立有效的培训体系?