C++解析一些我们需要的数据

作者: 良知犹存

前言:

们经常会遇到一些Linux内核信息需要,比如一个wifi数据,中间是用tab键盘隔开的,然后每一行用换行符进行区分,如下所示的数据

第一位置是:wifi名称 第二个位置是:信号强度 第三个位置是:信号类型2.4Ghz或者5Ghz 第四个位置是:加密类型 第五个类型是:MAC地址

遇到这样的数据,们比较常见的C函数解析是用while循环去匹配字符串里面的'\t'(tab键),'\n'(换行符号)等,然后用C标准库里面str函数,例如strncpy进行复制或者strstr去查找,类似于下面所示:

    int i, j ;
    i = 0;
    j = strlen(strIn) - 1;
    while(strIn[i] == ' ' || strIn[i] == '\t')
            ++i;

    while(strIn[j] == ' ' || strIn[j] == '\t')
            --j;
    strncpy(strOut, strIn + i , j - i + 1);

那么们怎么用C++解析呢,最近刚好解析了部分wifi信息,所以给大家分享哈这部分。

作者:良知犹存

转载授权以及围观:欢迎关注微信公众号:羽林君

或者添加作者个人微信:become_me


解析代码 {解析代码}

对应上面的wifi信息的表,们看到了一行有五个数据,这时候打包收到了一个string类型的wifi信息。

第一件事情,们先确认好解析的范围,即知道最开始一位和最后一位,设置好recivemsg.begin 和 recivemsg.

第二件事情,进行识别tab符号和换行符号之后进行分段

第三件事情 ,把分好的数据塞到一个vector 容器里面,然后因为每一行都有五个数据,所以们就可以按照0~5一组的数据进行分发给各处。

实际代码如下: {实际代码如下:}

vector<string> Parse_Wifi_List(string& msg)
{
        vector<string> words;
        if(msg.empty())
            return words;
        string::iterator temp_p = msg.begin();
        string sepword;
        bool bit_true = false;
        while(temp_p != msg.end())
        {
            if(/* * temp_p == ' ' || */  * temp_p == '\t' || * temp_p == '\n')
            {
                if(bit_true)
                {
                    words.push_back(sepword);
                    PP_INFO("seword :%s",sepword.c_str());
                    sepword.clear();
                }   
                bit_true = false;
                temp_p++;
                continue;
            }
            else
            {
                bit_true = true;
                sepword += *temp_p;
            }
            if(*temp_p ++ == '\0')
            {
                break;
            }
            // else
            // {
            //  PP_INFO("%d %d %c",msg.end(),*temp_p,*temp_p);
            // }
        }
        // for(auto point : words)
        // {
        //  printf(".%s\n",point.c_str());
        // }
          //for(uint16_t i =0;i<words.size();i+=5)
            //{
                 // printf("[]%s,%s\n",words[i].c_str(),words[i+1].c_str(),words[i+3].c_str());
        //}
        return words;
    }

使用此代码解析LOG如下: {使用此代码解析log如下:}

结语

这就是分享的一个简单的C++解析一些特殊符号的实践,如果大家有更好的想法和需求,也欢迎大家加好友交流分享哈。


作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注,与一起同行。

                                                ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】C++的智能指针你了解吗?

【2】嵌入式底层开发的软件框架简述

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

原文作者:良知犹存

原文链接:https://www.cnblogs.com/conscience-remain/p/14761423.html

更多推荐

更多
  • Azure数据工程指南-二十四、数据治理的权限 创建 azure 预览帐户,探索 azure 预览,探索词汇表,浏览资产,以编程方式使用预览,摘要,管理凭证和访问,创建扫描, 许多组织需要建立数据治理流程、标准和方法,并且已经能够使用内部 SQL Server 工具(如 Master
    Apache CN

  • Azure数据工程指南-二十二、Synapse 分析工作区 创建 Synapse 分析工作区,使用 Spark 探索样本数据,用 SQL 查询数据,用 SQL 创建外部表,摘要, 微软 Azure 数据平台的众多新增功能已经围绕许多类似的产品及其在现代 Azure 数据平台中的用途产生了兴奋和困
    Apache CN

  • Azure数据工程指南-二十三、数据块中的机器学习 创建 MLflow 实验,安装 MLflow 库,创建笔记本,选择性测井,自动记录,摘要, 寻求利用机器学习(ML)和人工智能能力的组织和开发人员花费大量时间构建 ML 模型,并寻求一种方法来简化他们的机器学习开发生命周期,以跟踪实验,
    Apache CN

  • Azure数据工程指南-二十一、将 Apache Spark 的 GraphFrame API 用于图形分析 安装 JAR 库,加载新数据表,将数据加载到数据块笔记本中,用顶点和边构建一个图,查询图表,寻找有图案的图案,用 PageRank 发现重要性,探索入度和出度度量,摘要,进行广度优先搜索,查找连接的组件, 图形技术使用户能够以图形的形式
    Apache CN

  • Azure数据工程指南-20 二十、部署 SQL 数据库先决条件,创建 Visual Studio SQL 数据库项目,安装 Visual Studio GitHub 扩展,导入 AdventureWorks 数据库,连接到 GitHub Repo 源代码控制,将
    Apache CN

  • Azure数据工程指南-十九、部署数据工厂更改 先决条件,创建 DevOps 持续集成构建管道,创建 DevOps 持续部署发布渠道,验证部署的数据工厂资源,摘要,Azure PowerShell 任务停止触发器,ARM 模板部署任务,Azure PowerShell 任务启动触发器
    Apache CN

  • Azure数据工程指南-十八、用于 Cosmos DB 的 Azure Synapse 链接 创建一个 Azure Cosmos DB 帐户,启用 Azure Synapse 链接,创建一个 Cosmos DB 容器和数据库,将数据导入 Azure Cosmos DB,在 Azure Synapse Analytics 中创建
    Apache CN

  • Azure数据工程指南-十六、流分析异常检测 先决条件,创建流分析输入和输出,创建实时电源 BI 仪表板,监控实时电源 BI 流,摘要,创建 Azure 流分析作业,创建物联网中心,创建 Power BI 服务,下载设备模拟器,添加流输入,添加流输出,编写流分析查询,启动流分析作业
    Apache CN

  • Azure数据工程指南-十七、使用 Apache Spark 的实时物联网分析 先决条件,创建物联网中心,创建数据块集群,安装 Maven 库,创建笔记本并运行结构化流查询,摘要,配置笔记本连接,开始结构化流,启动物联网设备模拟器,显示实时流数据,创建 Spark SQL 表,将流写入增量表, 实时物联网分析、高级
    Apache CN

  • Azure数据工程指南-十五、DeltaLake 为什么是酸性 DeltaLake,先决条件,创建并插入 DeltaLake,更新 DeltaLake,从 DeltaLake 删除,浏览增量日志,摘要,插入,更新,删除, 在使用 Azure Data Lake Storage Gen2
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多