你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

提取出如下字符串,应该用什么函数呢?HAL的库

[复制链接]
sos博 提问时间:2019-11-19 21:54 /


1,串口发来的数据格式是
"命令名+空格+id1+空格+id2+空格+id3+空格+id4+空格+id5+空格+"string"\r"
例如如下的真实数据:
revdata 1 1 17 1 2 "hi"\r

2,请问我怎么把收到的数据用5个变量保存,比如我定义了变量如下:
uint8_t id1,id2,id3,id4,id5;
char *string;

最终我想要得到的结果是
id1=1
id2=1
id3=17
id4=1
id5=2
*string="string"

3,
有时候命令只带id1,id2
有时候命令只带id1,id2,id3
有时候命令只带id1,id2,id3,id4
有时候命令只带id1,id2,id3,id4,id5
也就是说,revdata后面跟的数据个数不一定。

请问我这个问题应该怎么解决呢?一筹莫展,谢谢大家了。


收藏 1 评论17 发布时间:2019-11-19 21:54

举报

17个回答
stm1024 回答时间:2019-11-19 23:13:41
C函数:strtok,C 标准库 - <string.h>参考一下,这个基本可以满足要求,就是写起来稍微麻烦一些。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

likang1202 回答时间:2019-11-20 08:49:42
大概就是这个样子
1574210926(1).jpg

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

mikecai 回答时间:2019-11-20 08:54:49
单个 内容跟空格比较,得前后地址增量,按起始址及长度取 命令,ID,字符串即可。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

子曰好人 回答时间:2019-11-20 09:10:30
在数据格式中加入数据长度就可以判定了
lwg8458 回答时间:2019-11-20 13:58:38
接收时计数,确定每帧长度,然后根据长度分配
sos博 回答时间:2019-11-21 12:10:30
lwg8458 发表于 2019-11-20 13:58
接收时计数,确定每帧长度,然后根据长度分配

不行的,只知道第几个空格后面是什么类型数据,数据长度是不一定的。那字符串来什么字符都可能,确定不了长度。
sos博 回答时间:2019-11-21 12:11:17
子曰好人 发表于 2019-11-20 09:10
在数据格式中加入数据长度就可以判定了

长度不可知。实时数据,长度是不定的。
sos博 回答时间:2019-11-21 12:13:35
stm1024 发表于 2019-11-19 23:13
C函数:strtok,C 标准库 - 参考一下,这个基本可以满足要求,就是写起来稍微麻烦一些。
...

好像很好。是我想要的。像python和java等里面都有个split函数,很简单就能拆分了字符串。感谢。
子曰好人 回答时间:2019-11-21 15:01:00
sos博 发表于 2019-11-21 12:11
长度不可知。实时数据,长度是不定的。

下位机发数据的时候包含数据长度不就知道了吗,协议自己定,如果你没办法改协议就当我没说
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版