使用golang实现计算CRC-16(modbus)

通信领域中计算CRC是一种常用模式,现在使用golang来计算一组数据的校验值首先给出计算参考 数据组 CRC-16 modbus-crc 01 02 03 04 2BA1 A12B调用计算CRC-16的函数调用CheckSum 示例 m_data := []byte{0x01,0x02,0x03,0x04} //创建Byte切...
摘要由CSDN通过智能技术生成

通信领域中计算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,
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值