sos博 发表于 2019-11-19 21:54:02

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



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后面跟的数据个数不一定。

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


stm1024 发表于 2019-11-19 23:13:41

C函数:strtok,C 标准库 - <string.h>参考一下,这个基本可以满足要求,就是写起来稍微麻烦一些。

likang1202 发表于 2019-11-20 08:49:42

大概就是这个样子

mikecai 发表于 2019-11-20 08:54:49

单个 内容跟空格比较,得前后地址增量,按起始址及长度取 命令,ID,字符串即可。

子曰好人 发表于 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
长度不可知。实时数据,长度是不定的。

下位机发数据的时候包含数据长度不就知道了吗,协议自己定,如果你没办法改协议就当我没说
页: [1] 2
查看完整版本: 提取出如下字符串,应该用什么函数呢?HAL的库