matlab

您所在的位置:网站首页 matlab中将数字转换成字符串 matlab

matlab

#matlab| 来源: 网络整理| 查看: 265

matlab–16进制转ASCII代码 前言

由于对RTK设备输出转换的需要,撰写了一个matlab转换16进制到ASCII代码。

一、读文件 1.textscan

C = textscan(fileID,formatSpec) 将已打开的文本文件中的数据读取到元胞数组 C。该文本文件由文件标识符 fileID 指示。使用 fopen 可打开文件并获取 fileID 值。完成文件读取后,请调用 fclose(fileID) 来关闭文件。 配合fopen使用!

2.cell数组

1.cell数组的创建

可以直接通过{}类似于矩阵的直接赋值:a={‘winter’,123,‘coming’,‘哈哈’}; 2.cell数组的访问

与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。 在这里插入图片描述

元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()

a={1,2,3};

a{1}=[];%并不能删除第一个cell单元,只是变成空值

a(1)=[];%删除第一个单元

3.字符转换命令

hex2dec(data) 16进制转到十进制 char(hex2dec(data)) 16进制转到char

4.num2str()与num2double的区别

两者都是能够将数字转为字符串

相同点: 当str为一个含数字的字符串时, str2num 函数与 str2double 函数一样。 在这里插入图片描述

不同点:当str为多个字符串构成的数组时, str2num 函数与 str2double 函数有区别。

如: 在这里插入图片描述

二、代码 path = 'D:\Rtk主机-2020-11-12-14-27-30.txt'; fid = fopen(path, 'r+'); if fid == -1 disp('fopen failed'); else ReadData = textscan(fid,'%s'); end fclose(fid); data_hex = ReadData{1}; % 取cell len = length(data_hex); % 16进制转为ASCII row_num = 0; % 行 line_num = 0; % 列 data_char = {}; flag_time_trans = 0; % 时间格式转换标志 flag = 0; % 十六进制转ASCII for i=1:len if(char(data_hex(i,1))=='') flag = 0; % 完成一行的转换 continue; elseif(char(data_hex(i,1))=='|') flag = 1; continue; elseif(flag == 1) data_char(row_num,line_num) = {hex2char(data_hex(i,1))}; % 16进制数据转换为char line_num = line_num + 1; elseif(flag_time_trans == 1) seconds = seconds_trans(data_hex(i,1),data_hex(i+1,1)); % 时间转换格式 data_char(row_num,line_num) = {seconds}; line_num = line_num + 1; flag_time_trans = 0; end en function data = hex2char(data_hex) % 把0x去掉从十六进制转成10进制再转成char data = char(data_hex); data = data(1,3:4); data = char(hex2dec(data)); end function seconds = seconds_trans(years,hours) % 时间字符转为数字 years = char(years); hours = char(hours); seconds = num2str(str2double(hours(1,1:2))*3600000+str2double(hours(1,4:5))*60000+str2double(hours(1,7:8))*1000+str2double(hours(1,10:12))); end 结果 在这里插入图片描述

输出data_char 为单个字符储存,根据RTK协议加入了部分代码能够整理符合协议的格式 % 整合单个字符为GGA格式

[m,n] = size(data_char); DATA_char(:,1) = data_char(:,1); list = []; line_num = 0; % 列 for i=1:m list = []; line_num = 2; for j =2:n if (data_char{i,j} == ',') DATA_char{i,line_num} = list; DATA_char{i,line_num+1} = {','}; line_num = line_num+2; list = []; elseif (data_char{i,j} == 13) DATA_char{i,line_num} = list; line_num = line_num+1; list = []; elseif (data_char{i,j} == 10) continue; elseif(data_char{i,j} == []) list = []; line_num =2; break; % 结束一行 elseif(data_char{i,j} == '$') list = [list,data_char{i,j}]; else list = [list,data_char{i,j}]; end end end

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3