You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:01:15