MATLAB串口读取字符串末尾含三点,如何去除?
解决MATLAB串口读取数据末尾的省略号问题
看起来你遇到的是MATLAB显示cell数组时的小坑——那些…其实大概率不是实际的三个点字符,而是因为从串口读取的字符串末尾带有不可见的控制字符(比如回车\r、换行\n),MATLAB在命令行显示时用省略号代替这些不可打印字符。当然也不排除设备确实发送了多余后缀,下面给你几种针对性解决方法:
方法1:先清理读取到的整行数据(推荐)
在分割字符串之前,先去掉首尾的空白和控制字符,用strtrim就能搞定,它会自动移除换行、回车、空格这类字符:
clear all clc teensy=serial('COM4','BaudRate',38400); fopen(teensy); for m = 1:10 line = fscanf(teensy); line = strtrim(line); % 关键步骤:清理首尾空白与控制字符 values = strsplit(line,','); disp(line); disp(values); end fclose(teensy);
如果strtrim不够彻底(比如存在其他特殊控制字符),可以用正则表达式直接保留我们需要的字符(数字、小数点、逗号):
line = regexprep(line, '[^0-9.,]', ''); % 仅保留数字、小数点和逗号,剔除其他所有字符
方法2:直接处理分割后的最后一个元素
如果确认是设备真的发送了三个点后缀(不管是英文点...还是省略号…),可以直接替换掉:
values = strsplit(line,','); % 根据实际后缀类型选择替换语句 values(end) = strrep(values(end), '…', ''); % 替换中文省略号 % values(end) = strrep(values(end), '...', ''); % 替换三个英文点
验证小技巧
你可以先查看读取到的line的实际ASCII编码,确认是否存在不可见字符:
disp(double(line)); % 字符串转ASCII码,回车是13、换行是10,正常字符编码都是可见范围
这样就能精准定位问题根源啦!
内容的提问来源于stack exchange,提问作者Lightsout
相关产品推荐
相关产品推荐

