網絡通訊數據處理 Xbytestring類

PS_Xbytestring

a byte string for store low level data type css

文件夾[TOC]


base info

在基於TCP/UDP 或者串口通訊底層的通訊過程當中。涉及到大量的字符串操做:存儲拷貝傳參 等。java

xbytestring 類時面向底層通訊,專門針對 unsigned char 字符串操做的而開發的。 相對於使用 字符指針的開發方式, xbytestring 具有 調用方便安全的特性,很是好的攻克了 字符串操做過程當中遇到的諸多缺陷,於此同一時候 xbytestring 可以很是好的兼容 ST::stringunsigned char ,char 數據類型,方便開發人員更加在各個數據類型之間轉化。 c++

background

在低層次的網絡通訊過程當中。所有的數據都是經過 ascii 碼的形式接受和傳輸。使用char,或者unsigned char的數據類型 進行數據的存儲或者傳遞 對於上層的開發時是很是不方便。git

由於期間涉及到大量的動態內存建立刪除指針傳遞拷貝內存溢出則是這其中最easy引起的問題,這是另無數開發頭疼不已的問題,儘管很是多狀況下可以用智能指針解決問題。但是對於字符的操做卻不老是那麼的安全友好github

  • C 語言的特性 : 爲了高效而犧牲了代碼的安全
  • 高級的語言特性 : 犧牲代碼的效率來換取 代碼安全和開發效率

analysis

略微有開發經驗的讀者可能聯想到了 STL庫提供的 std::string來解決問題. string 可以很是好的作到 字符串數據的存儲傳遞, 但是在實際的開發的過程當中,基於UDP /TCP 協議的網絡通訊中,涉及到大量的使用0x00 這種字符表明的操做, 而string 天生對0x 00 敏感的特性(默以爲結束符),致使string會本身主動丟棄在接受到0x00字符後的所有的數據.
很是顯然,這不是咱們所但願看到的結果。安全

爲了更好的兼容 0x00 。方便的存儲和傳參的需求。 在開發過程當中急需一 類似於string的容器。可以很是好的存儲網絡其中給定長度的 字符串.markdown

通過一番谷歌以後, 僅有的一點發現也只 是 java 平臺下的 ByteString ,很是惋惜,這不是給C++ 用的, 考慮再三,爲何不重造一個呢? 造輪子但是C++ 的專利啊。 網絡


feature

  • 操做方便安全,接口友好
  • 兼容 string 的接口
  • 默認存儲 unsigned char
  • 高速實現 xbytestring 和 char ,string 數據類型的轉化
  • 自由拓展字符串長度
  • 內存安全
///////////////////////////////////////////////////////////////
/* File name : Xbytestring.h Author : LEO Date : 2015-3-12 Email : lion_117@126.com Description: 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

點擊此連接下載源代碼app

相關文章
相關標籤/搜索