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
}