JSON解析接口-C

JSON解析接口-C

#include <stdio.h>
#include <string.h>#define uint8_t unsigned char
#define uint32_t unsigned int
#define uint16_t unsigned short//根据实际模块来
#define REV_D  "+IPD"  
#define FUN_PAR_OVERFLOW 0xff
//将数组/指针中为0x00的字段全部变成空格号
void buf_clear_0(uint8_t *data, uint8_t lenth)
{int i=0;for(i=0; i<lenth; i++ ){if(data[i] == '\0'){data[i] = ' ';}}	
}
//查询字符在字符串位置函数
uint8_t find_char_len(uint8_t *str, uint8_t c,uint16_t len)
{int i=0;for(i=0; i<len; i++){if(str[i] == c){return i;}}printf("FUN_PAR_OVERFLOW \r\n");return FUN_PAR_OVERFLOW;
}
//解析命令数据
/*
cmd :解析的命令, 
data:原数据,
rev_data:解析得到的数组 
rev_data_len:数组长度
blank_on:json字段是否有空格
str_on:是否是字符串(有双引号就是字符串)
*/
uint8_t decode_cmd_data(uint8_t *cmd, uint8_t * data, uint8_t* rev_data,int rev_data_len, uint8_t blank_on, uint8_t str_on)
{char * tar_str=NULL;int cmd_len=0;char blank_len=2;uint32_t val;//如果没有空格if(blank_on == 1){blank_len++; }if(str_on == 1){blank_len++; }tar_str  = (char *)strstr((char *)data, cmd);if(tar_str != NULL){tar_str = &tar_str[strlen(cmd) + blank_len];//字符串if(str_on == 1){cmd_len = find_char_len((uint8_t *)tar_str,'"',rev_data_len);if(cmd_len == FUN_PAR_OVERFLOW){    return ;}memcpy(rev_data,tar_str,cmd_len); }else{val = atoi(tar_str);memcpy(rev_data,&val,4); }//printf("ok\r\n");return 1; //成功}else{printf("err\r\n");return 0; //失败}}//解析json-解析命令
void decode_cmd(uint8_t *data)
{uint8_t file_name[50]={0};uint8_t file_ver[20]={0};uint8_t file_size[20]={0};uint8_t file_checksum[64]={0};uint32_t dat_num=0;if(strstr(data,"START_UPGRADE")){//printf("have dat\r\n");//printf("%s\r\n",data);decode_cmd_data("file_name",data,file_name,sizeof(file_name),1,1);decode_cmd_data("version",data,file_ver,sizeof(file_ver),1,1);decode_cmd_data("file_size",data,file_size,sizeof(file_size),1,1);decode_cmd_data("checksum_check",data,file_checksum,sizeof(file_checksum),1,1);decode_cmd_data("data_num",data,&dat_num,sizeof(dat_num),0,0);}printf("file_name: %s\r\n", file_name);printf("version: %s\r\n", file_ver);printf("file_size: %s\r\n", file_size);printf("checksum_check: %s\r\n", file_checksum);printf("dat_num:%d\r\n", dat_num);}
//解析json-初步解析
void decode_json(uint8_t * data)
{uint8_t *str;str  = strstr(data,REV_D);if(str != NULL){buf_clear_0(str,15);decode_cmd(str);}
}char buf[] = "+IPD: receive:WBS-MYD-V10-00000001\
{\\"cmd\": \"START_UPGRADE\",\\"data\": {\\"version\": \"1.0\",\\"file_name\": \"V1.0.0.bin\",\\"file_size\": \"128537\",\\"checksum_check\": \"67f3b40ba0cbb7d289a9cf6f3f75e6c319f12bdc82d5c35\",\\"data_num\":132466\}\
}";int main()
{decode_json(buf);return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【刷题】leetcode 1544.整理字符串

刷题 1544.整理字符串思路一&#xff08;模拟栈速解版&#xff09;思路二 &#xff08;原地算法巧解版&#xff09;思路三&#xff08;C栈版&#xff09; Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff…

“快递单号时效调整秘籍:轻松掌握,高效管理!“

亲爱的物流管理者们&#xff0c;您是否曾遇到过这样的问题&#xff1a;快递单号时效单位不符合您的实际需求&#xff0c;导致管理效率低下&#xff0c;无法准确追踪物流信息&#xff1f;现在&#xff0c;我们为您带来一份快递单号时效单位调整秘籍&#xff0c;让您轻松掌握&…

第三百六十七回

文章目录 1. 概念介绍2. 方法与细节2.1 获取方法2.2 使用细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容&#xff0c;本章回中将介绍如何获取时间戳.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

http协议基础与Apache的简单介绍

一、相关介绍&#xff1a; 互联网&#xff1a;是网络的网络&#xff0c;是所有类型网络的母集因特网&#xff1a;世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上&#xff0c;大家把连接在因特网上的计算机都成为主机。万维网&#xff1a;WWW&#xff08;world…

mysql order by布尔盲注

什么是order by 在MySQL支持使用ORDER BY语句对查询结果集进行排序处理&#xff0c;使用ORDER BY语句不仅支持对单列数据的排序&#xff0c;还支持对数据表中多列数据的排序。语法格式如下 select * from 表名 order by 列名(或者数字) asc&#xff1b;升序(默认升序) selec…

ONLYOFFICE 桌面应用程序 v8.0 引入令人惊叹的全新界面、本地主题和Moodle 集成等更新!

前言 官网链接&#xff1a; ONLYOFFICE 官方网址 ​ 感谢您对ONLYOFFICE桌面应用程序的关注&#xff01;ONLYOFFICE桌面应用程序是一款功能强大、易于使用的办公套件&#xff0c;它可以帮助您实现高效的文档处理、电子表格编辑和演示文稿设计。 无论您是个人用户还是企业用户…

Sqlite数据库详解

1.关于Sqlite SQLite 是一个进程内库&#xff0c;它实现了一个独立的、无服务器的、零配置的事务性 SQL 数据库引擎。 SQLite的代码属于公共领域&#xff0c;因此对 用于任何目的&#xff0c;商业或私人目的。 SQLite是世界上部署最广泛的数据库 应用程序比我们能做的要多 计数…

分披萨 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 “吃货”和“馋嘴”两人到披萨店点了一份铁盘(圆形)披萨&#xff0c;并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。 但是粗心服务员将披萨切成了每块大小…

【c语言】字符函数和字符串函数(上)

前言 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 1. 字符分…

@ 代码随想录算法训练营第9周(C语言)|Day62(单调栈)

代码随想录算法训练营第9周&#xff08;C语言&#xff09;|Day62&#xff08;单调栈&#xff09; Day25、回溯&#xff08;包含题目 739. 每日温度 496.下一个更大元素 I &#xff09; 739. 每日温度 题目描述 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置…

前端有哪些实现埋点、性能监控、告警的方式

前端错误监控&#xff1a; 通过监控前端错误来捕获客户端的异常和错误。可以使用第三方服务如Sentry、Bugsnag、Rollbar等&#xff0c;或者自行实现错误监控系统。 性能监控&#xff1a; 监控页面加载时间、资源加载时间、渲染时间等性能指标&#xff0c;以及页面的可交互性能…

Vue 卸载eslint

卸载依赖 npm uninstall eslint --save 然后 进入package.json中&#xff0c;删除残留信息。 否则在执行卸载后&#xff0c;运行会报错。 之后再起项目。

pthread_exit和pehread_join函数

pthread_exit&#xff1a; 在线程中禁止调用exit函数&#xff0c;否则会导致整个进程退出&#xff0c;取而代之的是调用pthread_exit函数&#xff0c;这个函数只会使一个线程退出&#xff0c;如果主线程使用pthread_exit函数也不会使整个进程退出&#xff0c;不会影响其他线程…

扫描TestNG框架编写的自动化用例确认其中是否包含断言的方法

在测试工作中&#xff0c;要确认TestNG框架编写的自动化用例中是否包含断言&#xff0c;我们可以使用一些静态代码分析工具。静态代码分析工具可以在不执行代码的情况下检查代码&#xff0c;发现可能的错误、代码异味或者不符合编码规范的地方。对于TestNG框架&#xff0c;一种…

Python元组详细教程

Python中的元组&#xff08;tuple&#xff09;是一种不可变的有序序列类型&#xff0c;用于存储多个值。由于元组是不可变的&#xff0c;因此你不能修改元组中的元素&#xff0c;但你可以访问和操作元组中的元素。 创建元组 你可以使用圆括号 () 来创建元组&#xff0c;元组中…

新媒体运营-定位及呈现方式篇

常见呈现方式:真人口述、小剧情、记录(边走边说)、Vlog+场景、画外音+场景、视频/图+文案 标题 是写给潜在客户看的, 内容 是给我们的目标用户看的。 01 要有核心内容 写文案从模仿开始,依样画葫芦 然后形成一套顺手的体系公式 02 要方便用户搜索 关键词、话题、连带关联词…

【JavaScript 漫游】【022】事件模型

文章简介 本篇文章为【JavaScript 漫游】专栏的第 022 篇文章&#xff0c;对 JavaScript 中事件模型相关的知识点进行了总结。 监听函数 浏览器的事件模型&#xff0c;就是通过监听函数&#xff08;listener&#xff09;对事件做出反应。事件发生后&#xff0c;浏览器监听到…

2.23日学习打卡----初学Nginx(二)

2.23日学习打卡 目录: 2.23日学习打卡一. Nginx 虚拟主机虚拟主机的分类Nginx支持三种类型的虚拟主机配置Nginx虚拟主机单网卡多IP配置Nginx虚拟主机_基于域名虚拟主机配置Nginx虚拟主机基于多端口的配置4 二. Nginx 核心指令root和alias指令的区别return指令rewrite指令rewrit…

MySQL-行转列,链接查询

1. 行转列 1.1 示例数据准备 create table test_9(id int,name varchar(22),course varchar(22),score decimal(18,2) ); insert into test_9 (id,name,course,score)values(1,小王,java,99); insert into test_9 (id,name,course,score)values(2,小张,java,89.2); inse…

【MATLAB源码-第148期】基于matlab的BP神经网络2/4ASK,2/4FSK,2/4PSK信号识别仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 调制技术基础 调制技术是通信技术中的基础&#xff0c;它允许数据通过无线电波或其他形式的信号进行传输。调制可以根据信号的振幅、频率或相位的变化来进行&#xff0c;分别对应于ASK、FSK和PSK。 1.1 2ASK与4ASK 振幅…