网络通信数据处理 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::stringunsigned 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

点击此链接下载源码

0 0
原创粉丝点击