crc
CRC(循环冗余校验)模块提供16位和32位CRC校验值的计算接口,支持分段计算,适用于数据完整性校验场景。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_crc16 | 计算16位CRC校验值,多项式为x16+x12+x5+1(0x1021) |
| uapi_crc32 | 计算32位CRC校验值,符合IEEE 802.3 CRC-32标准(0x04C11DB7) |
| uapi_crc32_no_comp | 计算32位CRC校验值(无补码),符合IEEE 802.3 CRC-32标准(0x04C11DB7) |
Functions
uapi_crc16
函数声明
头文件清单
include/middleware/utils/uapi_crc.h
功能说明
- 计算16位CRC校验值,采用多项式x16+x12+x5+1(0x1021)
- 支持分段计算,初始值为0,前一段计算结果作为后一段的crc_start输入
- 当buf为NULL时,直接返回crc_start值,不进行计算
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| crc_start | uint16_t | CRC初始值,分段计算时传入前一段计算结果 | 0 ~ 65535 |
| buf | const uint8_t * | 指向待计算数据的指针 | 非NULL时指向有效内存空间 |
| length | uint32_t | 待计算数据长度(单位: 字节) | 0 ~ 4294967295 |
返回值
- 返回类型:uint16_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| uint16_t CRC值 | CRC计算结果 | 正常计算完成 |
| crc_start | 返回原始初始值 | buf为NULL时 |
uapi_crc32
函数声明
头文件清单
include/middleware/utils/uapi_crc.h
功能说明
- 计算32位CRC校验值,多项式符合IEEE 802.3 CRC-32标准(0x04C11DB7)
- 支持分段计算,初始值为0,前一段计算结果作为后一段的crc_start输入
- 内部对crc_start执行异或0xFFFFFFFF补码操作,最终结果再异或0xFFFFFFFF返回
- 当buf为NULL时,直接返回crc_start异或0xFFFFFFFF后再异或0xFFFFFFFF的结果
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| crc_start | uint32_t | CRC初始值,分段计算时传入前一段计算结果 | 0 ~ 4294967295 |
| buf | const uint8_t * | 指向待计算数据的指针 | 非NULL时指向有效内存空间 |
| length | uint32_t | 待计算数据长度(单位: 字节) | 0 ~ 4294967295 |
返回值
- 返回类型:uint32_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| uint32_t CRC值 | CRC计算结果(含补码) | 正常计算完成 |
uapi_crc32_no_comp
函数声明
头文件清单
include/middleware/utils/uapi_crc.h
功能说明
- 计算32位CRC校验值(无补码),多项式符合IEEE 802.3 CRC-32标准(0x04C11DB7)
- 支持分段计算,初始值为0,前一段计算结果作为后一段的crc_start输入
- 不对crc_start执行补码异或操作,直接使用crc_start作为初始值进行计算
- 当buf为NULL时,直接返回crc_start值
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| crc_start | uint32_t | CRC初始值,分段计算时传入前一段计算结果 | 0 ~ 4294967295 |
| buf | const uint8_t * | 指向待计算数据的指针 | 非NULL时指向有效内存空间 |
| length | uint32_t | 待计算数据长度(单位: 字节) | 0 ~ 4294967295 |
返回值
- 返回类型:uint32_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| uint32_t CRC值 | CRC计算结果(无补码) | 正常计算完成 |
| crc_start | 返回原始初始值 | buf为NULL时 |