我们经常会遇到一些Linux内核信息需要,比如一个wifi数据,中间是用tab键盘隔开的,然后每一行用换行符进行区分,如下所示的数据
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比临汾网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式临汾网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖临汾地区。费用合理售后完善,10多年实体公司更值得信赖。
第一位置是: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信息,所以给大家分享哈这部分。
对应上面的wifi信息的表,我们看到了一行有五个数据,这时候打包收到了一个string类型的wifi信息。
第一件事情,我们先确认好解析的范围,即知道最开始一位和最后一位,设置好recivemsg.begin 和 recivemsg.
第二件事情,进行识别tab符号和换行符号之后进行分段
第三件事情,把分好的数据塞到一个vector容器里面,然后因为每一行都有五个数据,所以我们就可以按照0~5一组的数据进行分发给各处。
- vector
Parse_Wifi_List(string& msg) - {
- vector
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
- //{
- // printf("[]%s,%s\n",words[i].c_str(),words[i+1].c_str(),words[i+3].c_str());
- //}
- return words;
- }
使用此代码解析LOG如下:
这就是我分享的一个简单的C++解析一些特殊符号的实践,如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。
本文转载自微信公众号「羽林君」,可以通过以下二维码关注。转载本文请联系羽林君公众号。
作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。
当前标题:C++解析一些特殊符号Tab、换行符号
URL链接:http://www.36103.cn/qtweb/news31/431.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联