通信领域中计算CRC是一种常用模式,现在使用golang来计算一组数据的校验值
首先给出计算参考
数据组 | CRC-16 | modbus-crc |
---|---|---|
01 02 03 04 | 2BA1 | A12B |
调用计算CRC-16的函数
调用CheckSum 示例
m_data := []byte{
0x01,0x02,0x03,0x04} //创建Byte切片
checksum := CheckSum(m_data) //调用计算CRC函数 CheckSum
fmt.Printf("check sum:%X \n",checksum)
输出结果:
check sum:2BA1
Uint16转换为Byte切片
int16buf := new(bytes.Buffer) //构建int16 输出
binary.Write(int16buf,binary.LittleEndian,checksum) //将int16 从小端转换为 byte数组
fmt.Printf("write buf is: %X",int16buf.Bytes())
write buf is: A12B
Append切片
fmt.Printf("output-before:%X \n",m_data)
m_data = append(m_data,int16buf.Bytes()...)
fmt.Printf("output-after:%X \n",m_data)
output-before:01020304
output-after:01020304A12B
完整代码
package main
import (
"fmt"
"bytes"
"encoding/binary"
)
var MbTable = []uint16{
0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
0XC601, 0X06C0, 0X0780, 0XC741,