/* * binary_buf是二进制缓存 * 这里用字符串,来存储雷达的通信消息的原始数据 * Binary_buf 的内容格式:消息类型 + 消息数据 * * 例如思科的雷达的消息类型 * ready->ready->start->data->data->data->stop->ready->ready * * 提供了 is_equal 系列的函数,来进行判断前面的消息类型 * * 注意了:m_buf是中间可以允许有‘\0’的,不是单纯的字符串格式 * 末尾也不一定是‘\0’ */ #ifndef LIDARMEASURE_BINARY_BUF_H #define LIDARMEASURE_BINARY_BUF_H #include //雷达消息的类型 //在通信消息的前面一部分字符串,表示这条消息的类型。 //在解析消息的时候,先解析前面的消息类型,来判断这条消息的功用 enum Buf_type { //默认值 BUF_UNKNOW = 0 BUF_UNKNOW =0, //未知消息 BUF_READY =1, //待机消息 BUF_START =2, //开始消息 BUF_DATA =3, //数据消息 BUF_STOP =4, //结束消息 BUF_ERROR =5, //错误消息 }; //二进制缓存, class Binary_buf { public: Binary_buf(); Binary_buf(const Binary_buf& other); ~Binary_buf(); //使用参数构造,深拷贝,len为0时,使用strlen(buf),不存储结束符'\0' Binary_buf(const char* p_buf, int len = 0); //使用参数构造,深拷贝,len为0时,使用strlen(buf),不存储结束符'\0' Binary_buf(char* p_buf, int len = 0); //重载=,深拷贝, Binary_buf& operator=(const Binary_buf& other); //重载=,深拷贝,使用strlen(buf),不存储结束符'\0' Binary_buf& operator=(const char* p_buf); //重载+,other追加在this的后面, Binary_buf& operator+(Binary_buf& other); //重载+,追加在this的后面,使用strlen(buf),不存储结束符'\0' Binary_buf& operator+(const char* p_buf); //重载[],允许直接使用数组的形式,直接访问buf的内存。注意,n值必须在0~m_length之间, char& operator[](int n); //判空 bool is_empty(); //清空 void clear(); //比较前面部分的buf是否相等,使用 other.m_length 为标准 bool is_equal_front(const Binary_buf& other); //比较前面部分的buf是否相等,len为0时,使用strlen(buf)为标准,不比较结束符'\0' bool is_equal_front(const char* p_buf, int len = 0); //比较的buf是否全部相等, bool is_equal_all(const Binary_buf& other); //比较的buf是否全部相等,不比较结束符'\0' bool is_equal_all(const char* p_buf); public: char* get_buf()const; int get_length()const; protected: char* mp_buf; //二进制缓存指针 int m_length; //二进制缓存长度 private: }; #endif //LIDARMEASURE_BINARY_BUF_H