数据上报
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
714 B

package utils
import (
"encoding/binary"
)
const WCPOLY uint16 = 0x8408
type CRC16CCITT struct {
wCRCin uint16
}
func NewCRC16CCITT() *CRC16CCITT {
return &CRC16CCITT{}
}
func (c *CRC16CCITT) Update(b byte) {
c.wCRCin ^= uint16(b)
for j := 0; j < 8; j++ {
if (c.wCRCin & 0x0001) != 0 {
c.wCRCin >>= 1
c.wCRCin ^= WCPOLY
} else {
c.wCRCin >>= 1
}
}
}
func (c *CRC16CCITT) GetWCRCin(rawBytes []byte) []byte {
for _, b := range rawBytes {
c.Update(b)
}
//log.Printf("CRC16CCITT=0x%x", c.wCRCin)
return uint16toBytes(c.wCRCin)
}
func uint16toBytes(v uint16) []byte {
littleEndianBytes := make([]byte, 2)
binary.BigEndian.PutUint16(littleEndianBytes, v)
return littleEndianBytes
}