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. 取一个字符,如果是引号(")则返回进入结束的字符串处理。
2. 如果字符为0x30-0x39,则放入temp【0】,否则返回出错。
3. 取第二个字符,为0x30-0x39,则放入temp【1】;如果为0x20,就返回temp【0】-0x30;否则返回出错。
4. 取第三个字符,为0x30-0x39,则放入temp【2】;如果为0x20,就返回(temp【0】-0x30)*10 + (temp【1】-0x30);否则返回出错。
5. 取第四个字符,如果为0x20,就返回(temp【0】-0x30)*100 + (temp【1】-0x30)*10 + (temp【2】-0x30);否则返回出错。
正常的返回值,放入idx。重复上面的就得到idx+1.
结束的字符串处理,笨办法就是逐个拷贝两个引号之间的字符到string[x],结束后再放一个[0x00]字符串结束符。
为什么自己就不会主动去了解cjson?
cjson就是
发送方:把数据打包字符串然后发送出去
接收放:接收字符串,把字符串转换为数据;
不是不用是不知道啊,你说这个cjson是啥?别告诉我要改原数据,原数据是必须那个格式,不给我商量余地。
话说告stm32的都是什么思维呢?说个问题,一般不给你解答,然后说你把问题修改一下就好了。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
不行的,只知道第几个空格后面是什么类型数据,数据长度是不一定的。那字符串来什么字符都可能,确定不了长度。
长度不可知。实时数据,长度是不定的。
好像很好。是我想要的。像python和java等里面都有个split函数,很简单就能拆分了字符串。感谢。
下位机发数据的时候包含数据长度不就知道了吗,协议自己定,如果你没办法改协议就当我没说
Split函数我当然知道,C#里面也有,指定一个分隔符,就可以自动分割并反馈一个字符串数组,问题是C没有对等的函数,除非你自己实现。