package util import ( "encoding/binary" "fmt" "strconv" "strings" ) // IntToBytes 将一个 4 字节数字转换为 byte 数组 func IntToBytes(n int32) []byte { buf := make([]byte, 4) binary.BigEndian.PutUint32(buf, uint32(n)) // 使用 BigEndian 或 LittleEndian return buf } // Int16ToBytes 将一个 4 字节数字转换为 byte 数组 func Int16ToBytes(n uint16) []byte { buf := make([]byte, 2) binary.BigEndian.PutUint16(buf, uint16(n)) // 使用 BigEndian 或 LittleEndian return buf } func ToHexBytes(bytes []byte) string { var hexBytes string for b := range bytes { hexBytes = fmt.Sprint(hexBytes, strconv.FormatInt(int64(bytes[b]), 16), " ") } return strings.TrimSpace(hexBytes) } // CRC16-CCITT 校验算法 (多项式0x1021) func Crc16CCITT(data []byte) uint16 { crc := uint16(0xFFFF) for _, b := range data { crc ^= uint16(b) << 8 for i := 0; i < 8; i++ { if crc&0x8000 != 0 { crc = (crc << 1) ^ 0x1021 } else { crc <<= 1 } } } return crc }