迪文科技论坛

 找回密码
 立即注册
搜索
查看: 424|回复: 4

【提问】请教一个拆字符的问题

[复制链接]

3

主题

8

回帖

206

积分

中级会员

Rank: 3Rank: 3

积分
206
发表于 2023-9-15 16:01:27 | 显示全部楼层 |阅读模式
我这边想做一个接收json格式数据然后进行拆包的工作,然后发现一个问题,程序如下

char weather_data[] = {"+IPD,267:{\"results\":[{\"location\":{\"id\":\"WTQ3VZQP879N\",\"name\":\"瀹佹尝\",\"country\":\"CN\",\"path\":\"瀹佹尝,瀹佹尝,娴欐睙,涓浗\",\"timezone\":\"Asia/Shanghai\",\"timezone_offset\":\"+08:00\"},\"now\":{\"text\":\"闃甸洦\",\"code\":\"10\",\"temperature\":\"29\"},\"last_update\":\"2023-09-06T14:44:32+08:00\"}]}\r\nCLOSED"};

void weather_data_process(char* response) {
   
    char* line;
    char* token;
        char tem[100];
        u16 i;
    line = strstr(response, "8");  // 按换行符分割字符串
   
    while (line != NULL)
        {
         //          token = strtok(response, ",");
                 //   token = strtok(response, ":");
                  
                    u2_sendstring(parameter39);
                /*    token = strtok(response, "}");
            token = strtok(NULL, "{");
            token = strtok(NULL, ",");
                    
            token = strtok(NULL, ":");
                 token = strtok(NULL, "\"");
                    */
                //这段是拆解天气的程序
               
               
//                    sys_write_vp(0x4700, (u8*)&i, 1);
//          strncpy(parameter[0], token, MAX_SIZE - 1);
//            i=*token;

           token = strtok(NULL, ":");  
                   token = strtok(NULL, "\"");
//               strncpy(tem, token, 99);
//          sys_write_vp(0x4700, (u8*)tem, strlen(tem));                  
      

            // 清零数组
//            memset(wifiName, 0, sizeof(wifiName));
//        }

//        line = strtok(response+len, "\n");  // 继续分割下一行
    }
}

void main(void)
{   
        u16 len;
   
        sys_init();//系统初始化
        uart2_init(115200);//初始化串口2
        //Uart4_Init(115200);//初始化串口4
        
        while(1)
        {   

                        weather_data_process(weather_data);
               
                }
               
               
//        }
}

问题出现在这里 line = strstr(response, "8");  // 按换行符分割字符串
   
    while (line != NULL)
这个地方用strstr判断response中是否有8这里,我试了很多次,发现根本进不去while循环。试过字符串里面本来有的很多字母,”code“,”results“  包括很多数字,全都不行,进不去循环。判断成功的只有"," ,"+" , "_"这些符号,如果把这里改成强行进行while(1)拆出来的全部都是乱码,请问一下有经验的工程师这是什么原因,因为我在别的c语言的ide里面进行过模拟,跑出来是好的,放在迪文屏上就不行了,非常奇怪。
回复

使用道具 举报

0

主题

14

回帖

761

积分

高级会员

Rank: 4

积分
761
发表于 2023-9-15 18:23:55 | 显示全部楼层
我这边测试了,是可以正常显示的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

3

主题

8

回帖

206

积分

中级会员

Rank: 3Rank: 3

积分
206
 楼主| 发表于 2023-9-18 08:27:13 | 显示全部楼层
oqfdwin0622 发表于 2023-9-15 18:23
我这边测试了,是可以正常显示的

方便发一份dgus文件吗?谢谢。
回复

使用道具 举报

0

主题

14

回帖

761

积分

高级会员

Rank: 4

积分
761
发表于 2023-9-18 08:53:00 | 显示全部楼层
zl04018121 发表于 2023-9-18 08:27
方便发一份dgus文件吗?谢谢。

您好,请见附件!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

18

主题

120

回帖

1354

积分

金牌会员

Rank: 6Rank: 6

积分
1354
QQ
发表于 2023-9-18 09:17:53 | 显示全部楼层
建议自己写一个拆字符的函数,用系统函数在C51内核上可能会存在一些问题的。
二哲科技,欢迎联系,帮你解决问题,为你提供方案~
VX:erzhekeji
QQ:1002866443
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-4-15 06:22 , Processed in 0.043703 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表