binary_buf.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * binary_buf是二进制缓存
  3. * 这里用字符串,来存储雷达的通信消息的原始数据
  4. * Binary_buf 的内容格式:消息类型 + 消息数据
  5. *
  6. * 例如思科的雷达的消息类型
  7. * ready->ready->start->data->data->data->stop->ready->ready
  8. *
  9. * 提供了 is_equal 系列的函数,来进行判断前面的消息类型
  10. *
  11. * 注意了:m_buf是中间可以允许有‘\0’的,不是单纯的字符串格式
  12. * 末尾也不一定是‘\0’
  13. */
  14. #ifndef LIDARMEASURE_BINARY_BUF_H
  15. #define LIDARMEASURE_BINARY_BUF_H
  16. #include <iostream>
  17. //雷达消息的类型
  18. //在通信消息的前面一部分字符串,表示这条消息的类型。
  19. //在解析消息的时候,先解析前面的消息类型,来判断这条消息的功用
  20. enum Buf_type {
  21. //默认值 BUF_UNKNOW = 0
  22. BUF_UNKNOW = 0, //未知消息
  23. BUF_READY = 1, //待机消息
  24. BUF_START = 2, //开始消息
  25. BUF_DATA = 3, //数据消息
  26. BUF_STOP = 4, //结束消息
  27. BUF_ERROR = 5, //错误消息
  28. };
  29. //二进制缓存,
  30. class Binary_buf {
  31. public:
  32. Binary_buf();
  33. Binary_buf(const Binary_buf &other);
  34. ~Binary_buf();
  35. //使用参数构造,深拷贝,len为0时,使用strlen(buf),不存储结束符'\0'
  36. Binary_buf(const char *p_buf, int len = 0);
  37. //使用参数构造,深拷贝,len为0时,使用strlen(buf),不存储结束符'\0'
  38. Binary_buf(char *p_buf, int len = 0);
  39. //重载=,深拷贝,
  40. Binary_buf &operator=(const Binary_buf &other);
  41. //重载=,深拷贝,使用strlen(buf),不存储结束符'\0'
  42. Binary_buf &operator=(const char *p_buf);
  43. //重载+,other追加在this的后面,
  44. Binary_buf &operator+(Binary_buf &other);
  45. //重载+,追加在this的后面,使用strlen(buf),不存储结束符'\0'
  46. Binary_buf &operator+(const char *p_buf);
  47. //重载[],允许直接使用数组的形式,直接访问buf的内存。注意,n值必须在0~m_length之间,
  48. char &operator[](int n);
  49. //判空
  50. bool is_empty();
  51. //清空
  52. void clear();
  53. //比较前面部分的buf是否相等,使用 other.m_length 为标准
  54. bool is_equal_front(const Binary_buf &other);
  55. //比较前面部分的buf是否相等,len为0时,使用strlen(buf)为标准,不比较结束符'\0'
  56. bool is_equal_front(const char *p_buf, int len = 0);
  57. //比较的buf是否全部相等,
  58. bool is_equal_all(const Binary_buf &other);
  59. //比较的buf是否全部相等,不比较结束符'\0'
  60. bool is_equal_all(const char *p_buf);
  61. public:
  62. char *get_buf() const;
  63. int get_length() const;
  64. protected:
  65. char *mp_buf; //二进制缓存指针
  66. int m_length; //二进制缓存长度
  67. private:
  68. };
  69. #endif //LIDARMEASURE_BINARY_BUF_H