数据打包
字段位域、端序、缩放与 C 宏。
正在准备工具…
字段模型
每个字段由起始位 lsb、宽度 width、符号、缩放 scale 和偏置 offset 定义。工程值先转成原始整数:
解码时先取掩码,再按有符号字段做补码扩展,最后乘缩放、加偏置。字段不能重叠,也不能超出字宽;端序只改变输出字节的顺序,不改变字段位的位置。
例:16 位字中 FLAGS 位于 bit 0–3、CODE 位于 bit 4–15 且有符号。FLAGS=10、CODE=-1 得到 0xFFFA,大端字节为 FF FA,小端为 FA FF。
C 宏
头文件为每个字段生成 _POS、_MSK、_GET 和 _SET。_SET 接收原始字段值,缩放和偏置仍由应用层处理;这样宏不依赖浮点,也不会隐藏符号扩展。64 位字使用 uint64_t 和 UINT64_C 风格的掩码。
边界
编码时检查工程值能否落在字段的原始范围内;解码时检查字值不超过位宽。位域重叠、字段名为空或重复、缩放为 0 都会报错。位域布局不做编译器 struct 位域假设,跨编译器时仍以这套掩码为准。
64 位字段通过 JavaScript 数值输入,原始值超过 时会有精度损失;这种场合应缩小字段宽度,或在上位机直接用 BigInt 处理。