a byte string for store low level data type css
在基於TCP/UDP 或者串口通訊等底層的通訊過程當中。涉及到大量的字符串操做:存儲,拷貝, 傳參 等。java
xbytestring 類時面向底層通訊,專門針對 unsigned char 字符串操做的而開發的。 相對於使用 字符指針的開發方式, xbytestring 具有 調用方便, 安全的特性,很是好的攻克了 字符串操做過程當中遇到的諸多缺陷,於此同一時候 xbytestring 可以很是好的兼容 ST::string 。unsigned char ,char 數據類型,方便開發人員更加在各個數據類型之間轉化。 c++
在低層次的網絡通訊過程當中。所有的數據都是經過 ascii 碼的形式接受和傳輸。使用char,或者unsigned char的數據類型 進行數據的存儲或者傳遞 對於上層的開發時是很是不方便。git
由於期間涉及到大量的動態內存建立 和刪除,指針傳遞。拷貝,內存溢出則是這其中最easy引起的問題,這是另無數開發頭疼不已的問題,儘管很是多狀況下可以用智能指針解決問題。但是對於字符的操做卻不老是那麼的安全和友好。 github
- C 語言的特性 : 爲了高效而犧牲了代碼的安全
- 高級的語言特性 : 犧牲代碼的效率來換取 代碼安全和開發效率
略微有開發經驗的讀者可能聯想到了 STL庫提供的 std::string來解決問題. string 可以很是好的作到 字符串數據的存儲和 傳遞, 但是在實際的開發的過程當中,基於UDP /TCP 協議的網絡通訊中,涉及到大量的使用0x00
這種字符表明的操做, 而string 天生對0x 00
敏感的特性(默以爲結束符),致使string會本身主動丟棄在接受到0x00
字符後的所有的數據.
很是顯然,這不是咱們所但願看到的結果。安全
爲了更好的兼容
0x00
。方便的存儲和傳參的需求。 在開發過程當中急需一 類似於string
的容器。可以很是好的存儲網絡其中給定長度的 字符串.markdown
通過一番谷歌以後, 僅有的一點發現也只 是 java 平臺下的 ByteString ,很是惋惜,這不是給C++ 用的, 考慮再三,爲何不重造一個呢? 造輪子但是C++ 的專利啊。 網絡
- 操做方便安全,接口友好
- 兼容 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);
};
點擊此連接下載源代碼app