网络通信数据处理 Xbytestring类
来源:互联网 发布:mirror软件官网 编辑:程序博客网 时间:2024/05/16 05:07
PS_Xbytestring
a byte string for store low level data type
目录[TOC]
- PS_Xbytestring
- 目录TOC
- base info
- background
- analysis
- feature
- github
base info
在基于TCP/UDP 或者串口通信等底层的通信过程中,涉及到大量的字符串操作:存储,拷贝, 传参 等。 xbytestring 类时面向底层通信,专门针对 unsigned char 字符串操作的而开发的。 相对于使用 字符指针的开发方式, xbytestring 具备 调用方便, 安全的特性,很好的解决了 字符串操作过程中遇到的诸多缺陷,于此同时 xbytestring 可以很好的兼容 ST::string ,unsigned char ,char 数据类型,方便开发者更加在各个数据类型之间转化。
background
在低层次的网络通信过程中,所有的数据都是通过 ascii 码的形式接受和传输,使用char,或者unsigned char的数据类型 进行数据的存储或者传递 对于上层的开发时是非常不方便。 由于期间涉及到大量的动态内存创建 和删除,指针传递,拷贝,内存溢出则是这其中最容易引发的问题,这是另无数开发头疼不已的问题,虽然很多情况下可以用智能指针解决这个问题,但是对于字符的操作却不总是那么的安全和友好。
- C 语言的特性 : 为了高效而牺牲了代码的安全
- 高级的语言特性 : 牺牲代码的效率来换取 代码安全和开发效率
analysis
稍微有开发经验的读者可能联想到了 STL库提供的 std::string来解决这个问题. string 可以很好的做到 字符串数据的存储和 传递, 但是在实际的开发的过程中,基于UDP /TCP 协议的网络通信中,涉及到大量的使用0x00
这样的字符代表的操作, 而string 天生对0x 00
敏感的特性(默认为结束符),导致string会自动丢弃在接受到0x00
字符后的所有的数据.
很显然,这不是我们所希望看到的结果。
为了更好的兼容
0x00
,方便的存储和传参的需求, 在开发过程中急需一 类似于string
的容器,可以很好的存储网络当中给定长度的 字符串.
经过一番谷歌之后, 仅有的一点发现也仅仅 是 java 平台下的 ByteString ,很可惜,这不是给C++ 用的, 考虑再三,为什么不重造一个呢? 造轮子可是C++ 的专利啊。
feature
- 操作方便安全,接口友好
- 兼容 string 的接口
- 默认存储 unsigned char
- 快速实现 xbytestring 和 char ,string 数据类型的转化
- 自由拓展字符串长度
- 内存安全
////////////////////////////////////////////////////////////////*File name : Xbytestring.hAuthor : LEODate : 2015-3-12Email : lion_117@126.comDescription:All Rights Reserved *////////////////////////////////////////////////////////////////#pragma once#include <string>#include <vector>using namespace std;typedef unsigned char u_char;typedef unsigned int u_int;class Xbytestring{private: // to realize the copy constructor fuction vector<u_char> list_datastring;public: Xbytestring(void); Xbytestring(u_char *pchar , u_int nlenth); Xbytestring(string pstring); Xbytestring(const Xbytestring &obj_string); u_char & operator[](u_int nindex); Xbytestring operator+(Xbytestring & obj_a ); ~Xbytestring(void);public: u_int size(); u_char at( u_int nindex); bool empty(); void clear(); void c_str( u_char *pchar ); string tostring(); string tosafestring(); void setdata(u_char *pchar , u_int nlenth); void setdata(string pstr); void setdata(Xbytestring pobj); //**********abandon function interface ******// void Set_data(u_char *pchar , u_int nlenth); void Set_data(string pstr); //*******************************************// void append(u_char *pchar , u_int nlenth); void append(string pstring); void append(u_char pchar); void append(Xbytestring pobj); void erease(u_int nindex);private: bool Copy_deep(u_char * pstr , u_int nlenth);};
github
点击此链接下载源码
- 网络通信数据处理 Xbytestring类
- ios网络数据处理
- 通信网络以及通信类公司
- iOS网络通信类库
- iOS网络通信类库
- 一个tcp网络通信类
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- Android推送
- Quartz作业调度框架
- 【免费直播课】AppCan基础课程之第五讲 UI控件
- 按两次返回,退出程序
- Linux开发环境搭建与使用——Linux必备软件之Samba
- 网络通信数据处理 Xbytestring类
- 学习Java中的多线程编程系列(一):Thread和Runnable
- 可变参数列表
- ubuntu 登录不了图型界面
- <PC>HP的网络共享及创建热点问题
- 让人哭笑不得的 The value of attribute "value" associated with an element type "prope
- c++ 字符串与int,long ,double间的转换
- 在struts2中的struts.xml里重定向action时传参数
- Cocos2d-X的精灵