热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

常用字符串解析与处理方法

常用字符串解析与处理方法DanielLee2014-9-25工作一年多来,发现经常会用到字符串的解析与处理,比如编写路由器控制软件时,要对路由器返回的命令进行解析;对GPS注册网络

常用字符串解析与处理方法

DanielLee   2014-9-25


       工作一年多来,发现经常会用到字符串的解析与处理,比如编写路由器控制软件时,要对路由器返回的命令进行解析;对GPS注册网络时要进行命令的组合与返回值的判断;采集北斗数据时,要从标准GGA、GSA、RMC等协议中分类参数等等,其实都是如何处理字符串的问题,把字符串处理好,可以很容易的处理命令的交互。

一、字符串中变量提取

      ① scanf,可以通过特定的格式将一个字符串的变量直接分离出来,如下:

对“IPAddr=192.168.2.1:12345,ID=25535,Time=3,Speed=10END”进行参数提取可以用

paraCnt= sscanf(paraStr,"%[^=]=%[^:]:%[^,],%[^,],%[^,],%[^E]",headerTemp,ipAddrTemp,portTemp,idTemp,timeTemp,aralmSpeedTemp)来处理。这其中有4个变量,提取方法简单。值得注意的是其中几个数字的长度是会发生变化的,如果单纯靠字符的位置进行解析有时是会出错的,scanf利用特殊符号进行分隔可以有效解决这个问题。

       再举一个例子,如果你需要处理GPS或BD发来的定位信息,例如“$GPGGA,063952.000,4002.229934,N,11618.096855,E,1,4,2.788,37.254,M,0,M,,*71”

每条字符串可能包含很多变量,有的甚至可达20-30个,再使用之前的方法显然会很不方便。这时可以结合字符串设置的规则与scanf,比如在GPS或BD协议中每个变量之间都使用“,”隔开,这样通过查询是第几个变量后再通过scanf就可以把变量提取出来了。

       使用这个方法在字符串提取浮点数时尤为有用。

       ②专用库函数。我们很容易遇到去判断与解析比如IP地址、MAC地址、子网掩码等字符串的情况,如果自己去实现是需要花一点时间编写和调试,后来发现可以使用NetASCII_Str_to_MAC()、NetASCII_MAC_to_Str()、NetASCII_Str_to_IP()、NetASCII_IP_to_Str()等一系列的函数去处理,即简单又可靠,岂不是比自己写省时省事,高大上多了。

二、变量转为字符串

      sprintf(),主要功能是把格式化的数据写入某个字符串中,是个变参函数。例如通过以下方式就可以把存储在数组中的IP地址转化为AT指令中的字符串命令了

      strcat(TCPCmd,(char*)"AT+CIPSTART=\"TCP\",\"");

      for(i=0;i<3;i++){

        sprintf(tempBuf,"%d",IPpara[i]);

        strcat(TCPCmd,tempBuf);

        strcat(TCPCmd,(char *)".");

     }

三、其他

       在处理浮点数时,也会遇到与数组转换的情况,通常是设置一个结构体或共用体,来逐字节的读出,把浮点数转为数组比较或存储,反过来逐字节存入后,整体读出就可以得到浮点数的值了。


推荐阅读
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • 交换机配置:intg100unshintvlani1ipadd192.168.56.177qstelseuser-iv4authaaaproinsshupl3qsshuserpyt ... [详细]
  • c语言 怎么访问64位地址_C语言调动硬件的原理是什么?
    大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗?1c语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C ... [详细]
  • Apple iPad:过渡设备还是平板电脑?
    I’vebeenagonizingoverwhethertopostaniPadarticle.Applecertainlydon’tneedmorepublicityandthe ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Pygame中使用矩形对表面进行涂色的方法。通过查阅Pygame文档中的blit函数,可以了解到如何将一个表面的特定部分复制到另一个表面的指定位置上。具体的解决方法和参数说明在文中都有详细说明。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • LINUX运行谷歌TTS,中文TTS 的简单实现(基于linux)之 语音库的实现
    语音库保存着常用汉字的发音(多音的汉字只记录其一种发音,这也是本系统的一个缺陷,需要以后完善),所以先要得到一汉字集,这个汉 ... [详细]
author-avatar
星宇ooo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有