单片机数据接收 —— 自定义裁剪目标子串

例如在串口通信的代码中,我们通常会根据一些标志字符或者标志字符串来对母字符串进行裁剪,从而提取出我们想要的那段目标子串

我现在假设主机发送给从机的数据是angle:50;,也就是传递给从机一个角度值为50 的信息
然后从机需要从接收到的数据中把50 这个值提取出来并转化为整型:

char *p = NULL, *pend = NULL;

/* uart4_rcv_buf 是串口的接收数据端的buffer */
if((p=strstr((char *)uart4_rcv_buf, "angle:")) != NULL)
{
	char temp_str[2];
	p += strlen("angle:");
	if((pend=strstr(p, ";")) != NULL)
	{
		memcpy(temp_str, p, pend-p);
	}
	ANGLE = atoi(temp_str);
	p = NULL;
	pend = NULL;
}

上述代码说明:
首先,我们从buffer 中检索出标志字符串,也就是angle:,即得到了从angle:a 开始的一段字符串并后移一段距离使其重新指向angle: 后的第一位数字字符,接着再从这串字符串中检索出;,然后就可以将从第一位数字字符开始到分号结束的这段字符串复制到temp_str 变量中,也就是代表数字的那串子串。
最后利用stdlib 库中的atoi 函数将数字字符转化为整型数字。

发布了297 篇原创文章 · 获赞 93 · 访问量 12万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览