写点什么

C++ 解析一些特殊符号 tab、换行符号

用户头像
良知犹存
关注
发布于: 2021 年 05 月 12 日

前言:

我们经常会遇到一些 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<string>容器里面,然后因为每一行都有五个数据,所以我们就可以按照 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 如下:

结语

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




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


                                                ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
复制代码


推荐阅读


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


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


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


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


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


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

发布于: 2021 年 05 月 12 日阅读数: 12
用户头像

良知犹存

关注

还未添加个人签名 2020.05.29 加入

还未添加个人简介

评论

发布
暂无评论
C++解析一些特殊符号tab、换行符号