C# 如何从串口中 提取出多个数据

下位机通过串口向PC传了以下格式的温度数据:“欢迎使用该设备,T1=15℃T2=25℃T3=30℃T4=40℃”已经在串口上位机的DataReceived事件中,将这些数... 下位机通过串口向PC传了以下格式的温度数据:
“欢迎使用该设备,T1=15℃ T2=25℃ T3=30℃ T4=40℃”
已经在串口上位机的DataReceived事件中,将这些数据读取到了textbox1.text文本框中。
我现在想将T1、T2、T3、T4的温度数据,分别放到4个文本框中,便于分开显示,应该怎么提取这些数据呢?

我目前是傻傻的用indexof("=")获取第一个=的位置,indexof"℃"获取第一个℃的位置,然后将15取出来,但这样的话如果数据较多,就比较慢,而且放在DataReceived事件还会出现“不在同一个进程”的错误。

您有类似的案例吗?烦请指点一下,直接回复或发邮件至lping@cnnp.com.cn,都谢谢了。
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
百度网友62efd0c
2014-09-29 · TA获得超过405个赞
知道小有建树答主
回答量:854
采纳率:0%
帮助的人:615万
展开全部
看看你数据的格式了。 和收到的数据的频率了,频率慢的话可以用正则表达式匹配字符串处理;
快的话建议状态机,一个个字符处理。伪代码如下
int st = 0;
switch(st)
{
case 0: //等待第一个字符
if (c == 0xAA) //假设第一个字符是AA

st++;

break;

case 1:
if (c==0xBB)

st++;

else

st = 0;

break;

...

case n: //到实际的数据就拿出来单独处理,这样就肯定不会出错了。
}
追问
数据格式是Tn=???摄氏度,我想对已接收到的文本内容进行数据的提取...不知道这样说您清楚吗?呵呵
追答
我的意思是在接收的时候进行处理,同时读取,因为串口数据本质上是一个个来的,分包的情况不定,“欢迎使用该设备,T1=15℃  T2=25℃  T3=30℃  T4=40℃”有可能是先收到前面一半,再收到后面一半, 不像网络包是一起来的,所以建议一个个自己处理。
如果你是想对收到的数据进行处理,建议直接用正则表达式,自己百度一下。基本上下面的就可以了。

欢迎使用该设备,T1=(\d+)℃ T2=(\d+)℃ T3=(\d+)℃ T4=(\d+)℃
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻雪灵烽
2014-09-29 · TA获得超过1079个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:150万
展开全部
先将数据Split('摄氏度')分离数组,每个数组数据格式为T=数字,将数组内每个元素indexof('=')取数值。
追问
强强强
我再搜下分离的用法,还没用过..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式