ASC格式的协议数据解析

news/2024/9/11 2:47:04/ 标签: strstr

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

RTT-AT命令

例如,数据是 CGREG: 0,1,通过at_resp_parse_line_args_by_kw把1赋予link_stat。

at_resp_parse_line_args_by_kw在这里插入图片描述

at_resp_parse_line_args

at_resp_parse_line_args(resp, 1,"IP=%s", ip);
at_resp_parse_line_args(resp, 2,"MAC=%s", mac);

简化从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;
}

http://www.ppmy.cn/news/1507531.html

相关文章

pythonUI自动化007::pytest的组成以及运行

pytest组成&#xff1a; 测试模块&#xff1a;以“test”开头或结尾的py文件 测试用例&#xff1a;在测试模块里或测试类里&#xff0c;名称符合test_xxx函数或者示例函数。 测试类&#xff1a;测试模块里面命名符合Test_xxx的类 函数级&#xff1a; import pytestclass Test…

深度学习 —— 个人学习笔记14(ResNet、DenseNet)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 二十八、残差网络&#xff08; ResNet &#xff09; import torch import torchvision import time from torch impo…

白骑士的Matlab教学进阶篇 2.5 Simulink

系列目录 上一篇&#xff1a;白骑士的Matlab教学进阶篇 2.4 图像处理 Simulink是MATLAB的扩展工具&#xff0c;提供了一个图形化的建模和仿真环境。它广泛应用于系统设计、仿真、自动控制、信号处理等领域。本文将详细介绍Simulink的简介与基本使用、建立与仿真模型、控制系统…

Linux网络:I/O多路转接poll

目录 一、poll函数解析 二、events和revents事件取值 三、poll的优点 四、poll的缺点 一、poll函数解析 poll函数接口&#xff1a; #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); 参数解析&#xff1a; // struct pollfd 结构 struct p…

【C总集篇】第三章 字符串和格式化输入/ 输出

文章目录 第三章 字符串和格式化输入/ 输出字符/字符串简要理解前言字符介绍和使用数组的简单介绍数组的创建格式 字符串介绍和使用printf函数printf函数一般格式printf()的转换说明修饰符printf函数部分格式字符常用格式字符详解%d%f%c%s printf的返回值 scanf规则说明转化说明…

Spring Boot 3 新特性

Spring Boot 3 带来了许多新特性和改进&#xff0c;这些特性主要围绕提升性能、简化配置、增强的安全性以及支持更现代的Java和库版本。以下是一些Spring Boot 3的关键特性&#xff1a; 支持Java 17和更高版本&#xff1a; Spring Boot 3 官方支持Java 17&#xff0c;并且由于J…

VM——深度学习算子GPU版本耗时不稳定

1、问题&#xff1a;使用3080TI显卡4台130万相机&#xff0c;GPU版本算子&#xff0c;耗时不稳定&#xff0c;15ms-150ms波动 2、方法&#xff1a; 1&#xff09;参考海康提供的问题手册

数学中常用的解题方法

文章目录 待定系数法应用示例1. 多项式除法2. 分式化简3. 数列通项公式 总结 递归数列特征方程特征根的求解通项公式的求解示例 错位相减&#xff0c;差分错位相减法差分的应用结合理解 韦达定理二项式定理二项式定理的通项公式二项式系数的性质应用示例 一元二次求解1. 因式分…

怎样才算精通 Excel?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 高赞回答很系统&#xff0c;但普通人这么学&#xff0c;没等精通先学废了&#xff01; 4年前&#xff0c;我为了学数据分析&#…

Cycript安装报错 Library not loaded终极解决方案

一、下载安装 Cycript 官方完整 资源下载完成后&#xff0c;解压。目录如下&#xff1a; 二、执行 打开命令终端,cd到对应目录&#xff0c;然后执行./cycript #第一步&#xff1a;cd到解压的目录 cd /xx/cycrpt_0#执行&#xff1a; ./cycript 2.1、报错Library not Loaded …

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件

vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件&#xff0c;不仅如此&#xff0c;还有设定其他应用打开相应的文件&#xff0c;比如chrome打开html。插件食用方法也比较简单&#xff0c;安装后&#…

前端已经学会vue,做粒子效果

目录 1. Canvas API 2. WebGL 3. 粒子系统 4. 动画与性能优化 5. 现有库和框架 6. Vue 组件和状态管理 实践项目建议 案例1 案例2雪花 已经熟悉了 Vue、TypeScript 和 JavaScript&#xff0c;下面是一些你可以学习的内容&#xff0c;以帮助你实现粒子效果的界面&#…

python async

要使用 Python 的 async 特性编写一个代码&#xff0c;以交替使用两个 AI API 处理数据&#xff0c;您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的&#xff0c;并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…

处理Pandas中的JSON数据:从字符串到结构化分析

在数据科学领域&#xff0c;JSON作为一种灵活的数据交换格式&#xff0c;被广泛应用于存储和传输数据。然而&#xff0c;JSON数据的非结构化特性在进行数据分析时可能会带来一些挑战。本文将指导读者如何使用Pandas库将DataFrame中的JSON字符串列转换为结构化的表格数据&#x…

sql语句+mysql权限

sql语句 1.新增 2.删除 3.修改 4.查询 单表查询 select 字段名列表 from 表名&#xff0c;索引 聚合函数 只有 select ⼦句和 having ⼦句、order by ⼦句中能使⽤聚合函 数&#xff0c;where ⼦句不能使⽤聚合函数。当使⽤聚合查询以后&#xff0c;不能 使⽤where条件&a…

【mysql 第一篇章】系统和数据库的交互方法

一、宏观的查看系统怎么和数据库交互 在我们刚刚接触系统和数据库的时候不明白其中的原理&#xff0c;只知道系统和数据库是需要交互的。所以我们会理解成上图的形式。 二、MYSQL 驱动 随着我们的学习时间的加长以及对程序的了解&#xff0c;发现链接数据库是需要有别的工具辅…

乐凡三防平板:制造业移动作业平台的专业高效之选

在制造业数字化转型的浪潮中&#xff0c;移动作业平台成为了提升生产效率、优化管理流程的关键工具。其中&#xff0c;三防平板因其卓越的防护性能和高效的数据处理能力&#xff0c;正逐渐成为制造业移动作业的首选设备。本文将探讨三防平板如何为制造业带来专业高效的移动作业…

全新Bty分销系统源码v1.0/宝塔分销系统开源版源码/独立后台(附安装教程)

源码简介&#xff1a; 全新Bty分销系统源码v1.0&#xff0c;它作为宝塔分销系统开源版源码&#xff0c;功能强大&#xff0c;它内置了易支付功能&#xff0c;方便多了&#xff01; 这个Bty分销系统开源版&#xff0c;宝塔分销系统开源版。它基于宝塔开放的API底层控制器&…

鸿蒙AI功能开发【hiai引擎框架-主体分割】 基础视觉服务

hiai引擎框架-主体分割 介绍 本示例展示了使用hiai引擎框架提供的主体分割能力。 本示例模拟了在应用里&#xff0c;选择一张图片&#xff0c;识别其图片中的显著性主体并展示出来主体的边界框的数据。 需要使用hiai引擎框架通用文字识别接口hms.ai.vision.subjectSegmenta…

Npm使用教程(详细讲解)

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言 npm&#xff08;Node Package Manager&#xff09;是世界上最大的包管理器和软件注册表&#xff0c;专为 Node.js 生态系统设计。它是Node.js 的默认包管理工具&#xff0c;用于管理 JavaScript 项目的依赖项和包的安装、…