package utils // IsBigEnd 判断是否大端 func IsBigEnd() bool { var ( v3 uint32 b3 [4]byte ) v3 = 257 b3[0] = uint8(v3) b3[1] = uint8(v3 >> 8) b3[2] = uint8(v3 >> 16) b3[3] = uint8(v3 >> 24) if b3[0] == 1 { return false } return true } func IntoByte(c int) byte { var ( b3 [4]byte ) b3[0] = uint8(c) b3[1] = uint8(c >> 8) b3[2] = uint8(c >> 16) b3[3] = uint8(c >> 24) if IsBigEnd() { return b3[3] } return b3[0] } // HfWord2byte 将一个int16转换为两个byte func HfWord2byte(obj int) (slice []byte) { slice = append(slice, IntoByte(obj>>8)) slice = append(slice, IntoByte(obj&0xFF)) return } // Word2byte 将一个int转换为四个byte func Word2byte(obj int) (slice []byte) { slice = append(slice, IntoByte(obj>>24)) slice = append(slice, IntoByte(obj>>16)) slice = append(slice, IntoByte(obj>>8)) slice = append(slice, IntoByte(obj&0xFF)) return } func CalCRC16HJ212(data []byte) uint16 { var ( crc uint16 = 0xFFFF iNum uint16 = 0 ) length := len(data) for i := 0; i < length; i++ { iNum = uint16(data[i]) crc = (crc >> 8) & 0x00FF crc = crc ^ iNum for j := 0; j < 8; j++ { flag := crc % 2 crc = crc >> 1 if flag == 1 { crc = crc ^ 0xA001 } } } return crc }