跳转至

crc

CRC(循环冗余校验)模块提供16位和32位CRC校验值的计算接口,支持分段计算,适用于数据完整性校验场景。

头文件清单

#include <middleware/utils/uapi_crc.h>

接口清单

接口名称 功能简述
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

函数声明

uint16_t uapi_crc16(uint16_t crc_start, const uint8_t *buf, uint32_t length)

头文件清单

  • 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

函数声明

uint32_t uapi_crc32(uint32_t crc_start, const uint8_t *buf, uint32_t length)

头文件清单

  • 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

函数声明

uint32_t uapi_crc32_no_comp(uint32_t crc_start, const uint8_t *buf, uint32_t length)

头文件清单

  • 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时