From 95abe5496851166a5a1d56445ee1778be5cc376b Mon Sep 17 00:00:00 2001 From: coffee Date: Wed, 2 Jul 2025 15:38:41 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8C=96=E5=AE=8F=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/HStructConvByte.h | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/include/HStructConvByte.h b/include/HStructConvByte.h index 7d75529..49670eb 100644 --- a/include/HStructConvByte.h +++ b/include/HStructConvByte.h @@ -34,18 +34,22 @@ * HSTRUCT_END(); * } * // 使用已有的来序列化和反序列化 - * HSTRUCT_CONV_DEFINE(uint16_t) + * typedef struct Demo { + * uint8_t a; + * } Demo; + * HSTRUCT_CONV_DEFINE(Demo) * { - * HSTRUCT_FROM_BEGIN(uint16_t); - * // 这里只是示例, 使用 HSTRUCT_USE_CONV_FUNC 调用外部序列化, 数据偏移会自动调整 - * HSTRUCT_USE_CONV_FUNC(uint8_t, sizeof(uint8_t), HSTRUCT_GET_TYPE()); + * // 初始化对象 + * HSTRUCT_CONV_BEGIN(Demo); + * // 使用uint8_t来序列化Demo.a + * HSTRUCT_USE_CONV_FUNC(uint8_t, sizeof(uint8_t), HSTRUCT_GET_TYPE().a); * HSTRUCT_END(); * } */ #include -// 固定函数名 _HStructConvXXX +// 固定函数名 _HStructConv_XXX | _HStructFrom_XXX /** * @brief 类型数据转换成字节数据 @@ -103,7 +107,7 @@ HSTRUCT_UPDATE(0); \ } while (0) -// 定义或生命该类型的转换函数 +// 定义或声明该类型的转换函数 #define HSTRUCT_CONV_DEFINE(type) int _HStructConv_##type(const void *_var, char *_data, int _len) #define HSTRUCT_FROM_DEFINE(type) int _HStructFrom_##type(void *_var, const char *_data, int _len) @@ -113,6 +117,7 @@ #define HSTRUCT_FROM_ALIAS(type, aliasType) \ static inline int _HStructFrom_##type(void *_var, const char *_data, int _len) { return _HStructFrom_##aliasType(_var, _data, _len); } + // 对应参数获取方法 #define HSTRUCT_GET_TYPE_RAW() (_convVar) #define HSTRUCT_GET_TYPE() (*_convVar) @@ -120,19 +125,23 @@ #define HSTRUCT_GET_DATA_RAW(type) ((type)_convData) #define HSTRUCT_GET_DATA(type) (*((type *)_convData)) -// 函数实现的开始和结束 + +// 反序列化函数实现的开始 #define HSTRUCT_FROM_BEGIN(type) \ type *_convVar = (type *)_var; \ const void *_convData = _data; \ int _useLen = 0; +// 序列化函数实现的开始 #define HSTRUCT_CONV_BEGIN(type) \ const type *_convVar = (const type *)_var; \ char *_convData = (char *)_data; \ int _useLen = 0; +// 序列化和反序列化函数实现的结束 #define HSTRUCT_END() return _useLen + // 函数的检查数据是否足够 -#define HSTRUCT_CHECK_LEN(len) \ +#define _HSTRUCT_CHECK_LEN(len) \ if (HSTRUCT_GET_LEN() < len + _useLen) \ { \ LogD("data len[%d], use[%d]", __FILE_NAME__, __FUNCTION__, __LINE__, HSTRUCT_GET_LEN(), _useLen); \ @@ -142,7 +151,7 @@ // 更新长度数据 #define HSTRUCT_UPDATE(nextLen) \ _convData = (_data + _useLen); \ - HSTRUCT_CHECK_LEN(nextLen) \ + _HSTRUCT_CHECK_LEN(nextLen) \ _useLen += nextLen