[技术讨论] 如何提取特定字符型变量数据?

[复制链接]
7970|9
 楼主| QQ826220679 发表于 2021-8-26 23:54 | 显示全部楼层 |阅读模式
如何从字符型变量{"method":"thing.service.property.set","id":"560789526","params":{"Barcode":"12ABcd12ab"},"version":"1.0.0"}
中提取出 12ABcd12ab 并另存到字符型变量中?

评论

tyw
study hard, improve every day 好好学习,天天向上 усердно учись, совершенствуйся с каждым днем  发表于 2021-8-27 08:01
 楼主| QQ826220679 发表于 2021-8-27 00:00 | 显示全部楼层
        unsigned char tempbuff[600];                                                //临时缓冲区
        unsigned char Barcode[30];                                                //临时缓冲区
               
        unsigned char temp1[30];                                                //临时缓冲区
        unsigned char ID[10];
        sscanf((char *)tempbuff,"{\"method\":\"thing.service.property.set\",\"id\":\"%[^\"]\",\"params\":{\"Barcode\":\"%[^\"]\"},\"version\":\"%[^\"]\"}",ID,Barcode,temp1);
        u1_printf("ID:\"%s\"\r\n",ID);        //打印串口
        u1_printf("Barcode:\"%s\"\r\n",Barcode);        //打印串口
        u1_printf("temp1:\"%s\"\r\n",temp1);        //打印串口

这样在keil的STM32平台可以,在51单片机就不工作,那个大哥哥知道原因,怎么修改一下能用到51单片机平台呢?

tyw 发表于 2021-8-27 07:58 | 显示全部楼层
 楼主| QQ826220679 发表于 2021-8-27 13:20 | 显示全部楼层
sscanf((char *)tempbuff,"{\"method\":\"thing.service.property.set\",\"id\":\"%[^\"]\",\"params\":{\"Barcode\":\"%[^\"]\"},\"version\":\"%[^\"]\"}",ID,Barcode,temp1);

这句在STM32平台可以实现,在51平台,就没有效果,谁知道什么原因呢?
QuakeGod 发表于 2021-8-27 15:47 | 显示全部楼层
你这个是 JSON 数据格式,你用一个JSON 解释器就可以实现了。
sjnh 发表于 2021-8-27 16:47 | 显示全部楼层
用:strtok_r 和 (strstr / atol / atof)
chongdongchen 发表于 2021-8-27 17:23 | 显示全部楼层
地板楼正解,如果资源紧张可以用5楼的
huarana 发表于 2021-8-27 18:22 | 显示全部楼层
库函数strstr
描述
C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

当然最好用json
cooldog123pp 发表于 2021-8-28 09:57 | 显示全部楼层
三楼是正解,希望楼主测试通过以后可以把心得发出来给大家一起学习~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

170

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部