-
Notifications
You must be signed in to change notification settings - Fork 1
/
helper.go
176 lines (138 loc) · 3.7 KB
/
helper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
package crc16
import (
"fmt"
)
// 构造函数
func NewCRC16(params ...Params) *Table {
return NewTable(params...)
}
// 构造函数
func NewCRC16Hash(params Params) Hash16 {
table := &Table{}
table.params = params
return NewHash(table.MakeData())
}
// =======================
// 生成
func Checksum(data []byte, params Params) uint16 {
return NewTable(params).Checksum(data)
}
// 生成 IBM
func ChecksumIBM(data []byte) uint16 {
return NewTable(CRC16_IBM).Checksum(data)
}
// 生成 ARC
func ChecksumARC(data []byte) uint16 {
return NewTable(CRC16_ARC).Checksum(data)
}
// 生成 AUG_CCITT
func ChecksumAUG_CCITT(data []byte) uint16 {
return NewTable(CRC16_AUG_CCITT).Checksum(data)
}
// 生成 BUYPASS
func ChecksumBUYPASS(data []byte) uint16 {
return NewTable(CRC16_BUYPASS).Checksum(data)
}
// 生成 CCITT
func ChecksumCCITT(data []byte) uint16 {
return NewTable(CRC16_CCITT).Checksum(data)
}
// 生成 CCITT_FALSE
func ChecksumCCITT_FALSE(data []byte) uint16 {
return NewTable(CRC16_CCITT_FALSE).Checksum(data)
}
// 生成 CDMA2000
func ChecksumCDMA2000(data []byte) uint16 {
return NewTable(CRC16_CDMA2000).Checksum(data)
}
// 生成 DDS_110
func ChecksumDDS_110(data []byte) uint16 {
return NewTable(CRC16_DDS_110).Checksum(data)
}
// 生成 DECT_R
func ChecksumDECT_R(data []byte) uint16 {
return NewTable(CRC16_DECT_R).Checksum(data)
}
// 生成 DECT_X
func ChecksumDECT_X(data []byte) uint16 {
return NewTable(CRC16_DECT_X).Checksum(data)
}
// 生成 DNP
func ChecksumDNP(data []byte) uint16 {
return NewTable(CRC16_DNP).Checksum(data)
}
// 生成 GENIBUS
func ChecksumGENIBUS(data []byte) uint16 {
return NewTable(CRC16_GENIBUS).Checksum(data)
}
// 生成 MAXIM
func ChecksumMAXIM(data []byte) uint16 {
return NewTable(CRC16_MAXIM).Checksum(data)
}
// 生成 MCRF4XX
func ChecksumMCRF4XX(data []byte) uint16 {
return NewTable(CRC16_MCRF4XX).Checksum(data)
}
// 生成 RIELLO
func ChecksumRIELLO(data []byte) uint16 {
return NewTable(CRC16_RIELLO).Checksum(data)
}
// 生成 T10_DIF
func ChecksumT10_DIF(data []byte) uint16 {
return NewTable(CRC16_T10_DIF).Checksum(data)
}
// 生成 TELEDISK
func ChecksumTELEDISK(data []byte) uint16 {
return NewTable(CRC16_TELEDISK).Checksum(data)
}
// 生成 TMS37157
func ChecksumTMS37157(data []byte) uint16 {
return NewTable(CRC16_TMS37157).Checksum(data)
}
// 生成 USB
func ChecksumUSB(data []byte) uint16 {
return NewTable(CRC16_USB).Checksum(data)
}
// 生成 CRC_A
func ChecksumCRC_A(data []byte) uint16 {
return NewTable(CRC16_CRC_A).Checksum(data)
}
// 生成 KERMIT
func ChecksumKERMIT(data []byte) uint16 {
return NewTable(CRC16_KERMIT).Checksum(data)
}
// 生成 MODBUS
func ChecksumMODBUS(data []byte) uint16 {
return NewTable(CRC16_MODBUS).Checksum(data)
}
// 生成 X_25
func ChecksumX_25(data []byte) uint16 {
return NewTable(CRC16_X_25).Checksum(data)
}
// 生成 XMODEM
func ChecksumXMODEM(data []byte) uint16 {
return NewTable(CRC16_XMODEM).Checksum(data)
}
// 生成 XMODEM2
func ChecksumXMODEM2(data []byte) uint16 {
return NewTable(CRC16_XMODEM2).Checksum(data)
}
// =======================
// 输出四位 16 进制字符
func ToHexString(data uint16) string {
return fmt.Sprintf("%04X", data)
}
// 输出四位 16 进制字符,高低字节对调
func ToReverseHexString(data uint16) string {
data = (data << 8) ^ (data >> 8)
return fmt.Sprintf("%04X", data)
}
// 输出二进制字符
func ToBinString(data uint16) string {
return fmt.Sprintf("%016b", data)
}
// 输出二进制字符,高低字节对调
func ToReverseHexBinString(data uint16) string {
data = (data << 8) ^ (data >> 8)
return fmt.Sprintf("%016b", data)
}