当前位置: 首页 > news >正文

ASC格式的协议数据解析

函数来自RTT的AT组件 - at_client.c

例如,数据是 CGREG: 0,1,通过at_resp_parse_line_args_by_kw把1赋予link_stat。
在这里插入图片描述
简化从AT响应中提取信息的过程,使得编写与硬件通信的代码更加简洁和易于维护。

这么提数据也太方便了

at_resp_parse_line_args_by_kw函数原型

int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...)
{va_list args;int resp_args_num = 0;const char *resp_line_buf = RT_NULL;RT_ASSERT(resp);RT_ASSERT(resp_expr);if ((resp_line_buf = at_resp_get_line_by_kw(resp, keyword)) == RT_NULL){return -1;}va_start(args, resp_expr);resp_args_num = vsscanf(resp_line_buf, resp_expr, args);va_end(args);return resp_args_num;
}const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword)
{char *resp_buf = resp->buf;rt_size_t line_num = 1;RT_ASSERT(resp);RT_ASSERT(keyword);for (line_num = 1; line_num <= resp->line_counts; line_num++){if (strstr(resp_buf, keyword)){return resp_buf;}resp_buf += strlen(resp_buf) + 1;}return RT_NULL;
}

通义灵码

该函数用于在AT命令的响应中,根据关键字(keyword)获取响应行,并通过可变参数列表(resp_expr,
…)解析该响应行。具体步骤如下:

首先,检查传入的响应对象(resp)和响应格式字符串(resp_expr)是否为空,如果为空则触发断言失败。
然后,调用at_resp_get_line_by_kw函数,传入resp和keyword,获取与关键字匹配的响应行。如果未找到匹配的响应行,则返回-1。
使用va_start宏初始化可变参数列表args,以便解析响应行。
调用vsscanf函数,传入匹配的响应行和可变参数列表args,按照响应格式字符串(resp_expr)解析响应行,并将解析得到的参数存储在args中。
使用va_end宏清理可变参数列表args。 返回解析得到的参数数量resp_args_num。

在C语言中,%*d是一种特殊的格式说明符,用于scanf家族的函数中,包括sscanf和fscanf等。它主要用于读取数据但不存储这些数据,即“忽略”这些数据。下面详细解释一下它的用途和工作原理。

%*d 的含义

%*d 中的星号 * 表示忽略接下来读取的数据。
d 表示读取一个十进制整数。
工作原理
当你使用%*d时,它会告诉scanf家族的函数读取一个整数,但是不会将这个整数存储到任何变量中。换句话说,它只是用来“跳过”这部分数据。

示例
假设我们有一个字符串 “123,456”,我们想要读取逗号后面的数字456,但是忽略前面的数字123。

#include <stdio.h>
#include <stdlib.h>int main() {char str[] = "123,456";int num;// 使用 sscanf 解析字符串if (sscanf(str, "%*d,%d", &num) == 1) {printf("The number is: %d\n", num);} else {printf("Failed to parse the number.\n");}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Anaconda安装多个版本的Python并与Pycharm进行对接
  • 为企业创建智能支持 AI 代理
  • RTOS(8)信号量和互斥量
  • “Apple Intelligence”的“系统提示词”被曝光了
  • 【环绕字符串中唯一的子字符串】python刷题记录
  • 数据结构(java实现)——优先级队列,堆
  • NSSCTF练习记录:[SWPUCTF 2021 新生赛]include
  • actual combat 45 分布式事务seata,若依cloud项目Test,xid为null
  • 编译和汇编的区别
  • C++ 异常处理:深入解析与实践应用
  • 第100+20步 ChatGPT学习:R实现Lasso回归
  • LabVIEW远程开发
  • 为什么要推荐R语言?欢迎订阅专栏《R 探索临床数据科学》
  • 240806-在Linux/RHEL开机中自动启动bash脚本
  • YARN 的介绍
  • [LeetCode] Wiggle Sort
  • [NodeJS] 关于Buffer
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • es6
  • mysql innodb 索引使用指南
  • PHP的类修饰符与访问修饰符
  • python 学习笔记 - Queue Pipes,进程间通讯
  • SegmentFault 2015 Top Rank
  • vue中实现单选
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 给新手的新浪微博 SDK 集成教程【一】
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用权重正则化较少模型过拟合
  • 算法系列——算法入门之递归分而治之思想的实现
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ###C语言程序设计-----C语言学习(3)#
  • (09)Hive——CTE 公共表达式
  • (Ruby)Ubuntu12.04安装Rails环境
  • (笔记)M1使用hombrew安装qemu
  • (待修改)PyG安装步骤
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (九十四)函数和二维数组
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (四)js前端开发中设计模式之工厂方法模式
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (五)网络优化与超参数选择--九五小庞
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)认识微服务
  • (转)LINQ之路
  • . Flume面试题
  • .net6Api后台+uniapp导出Excel
  • @hook扩展分析
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • @SpringBootApplication 注解
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [BZOJ2208][Jsoi2010]连通数
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)