CRC(cylic redundancy check)数据帧校验

crc用于校验数据传输过程的完整性,crc码通常位于数据帧尾部,与数据帧同时传输。

计算数据帧的crc码与接收的crc码来确认数据完整性:

初始化一个寄存器为0xFFFF,逐步与每个数据帧进行异或操作。

# golang
func CalculateCRC(data []byte) uint16 {
	crc := uint16(0xFFFF)
	for _, b := range data {
		crc ^= uint16(b)
		for i := 0; i < 8; i++ {
			if crc&0x0001 != 0 {
				crc >>= 1
				crc ^= 0xA001
			} else {
				crc >>= 1
			}
		}
	}
	return crc
}