[修改]crc32校验逻辑

This commit is contained in:
thesai 2024-07-24 18:27:41 +08:00
parent ccaf53ec67
commit 7e38a912d4

View File

@ -8,9 +8,9 @@ var (
// crc16多项式为G(x)=X16+X11+X4+1 // crc16多项式为G(x)=X16+X11+X4+1
RSSP_I_CRC16 = crc.NewHash(&crc.Parameters{Width: 16, Polynomial: 0x0811, Init: 0x0, ReflectIn: true, ReflectOut: true, FinalXor: 0x0}) RSSP_I_CRC16 = crc.NewHash(&crc.Parameters{Width: 16, Polynomial: 0x0811, Init: 0x0, ReflectIn: true, ReflectOut: true, FinalXor: 0x0})
// 通道1 crc32多项式为0x100d4e63 // 通道1 crc32多项式为0x100d4e63
RSSP_I_C1_CRC32 = crc.NewHash(&crc.Parameters{Width: 32, Polynomial: 0x100d4e63, Init: 0x0, ReflectIn: true, ReflectOut: true, FinalXor: 0x0}) RSSP_I_C1_CRC32 = crc.NewHash(&crc.Parameters{Width: 32, Polynomial: 0x100d4e63, Init: 0x0, ReflectIn: false, ReflectOut: true, FinalXor: 0x0})
// 通道2 crc32多项式为0x8ce56011 // 通道2 crc32多项式为0x8ce56011
RSSP_I_C2_CRC32 = crc.NewHash(&crc.Parameters{Width: 32, Polynomial: 0x8ce56011, Init: 0x0, ReflectIn: true, ReflectOut: true, FinalXor: 0x0}) RSSP_I_C2_CRC32 = crc.NewHash(&crc.Parameters{Width: 32, Polynomial: 0x8ce56011, Init: 0x0, ReflectIn: false, ReflectOut: true, FinalXor: 0x0})
) )
// Rssp_I_Crc16计算 // Rssp_I_Crc16计算
@ -20,27 +20,27 @@ func Rssp_I_Crc16(data []byte) uint16 {
// 通道1的crc32 // 通道1的crc32
func Rssp_I_Crc32C1(data []byte) uint32 { func Rssp_I_Crc32C1(data []byte) uint32 {
newData := reverseBitsInByte(data) //newData := reverseBitsInByte(data)
return uint32(RSSP_I_C1_CRC32.CalculateCRC(newData)) return uint32(RSSP_I_C1_CRC32.CalculateCRC(data))
} }
// 通道2的crc32 // 通道2的crc32
func Rssp_I_Crc32C2(data []byte) uint32 { func Rssp_I_Crc32C2(data []byte) uint32 {
newData := reverseBitsInByte(data) //newData := reverseBitsInByte(data)
return uint32(RSSP_I_C2_CRC32.CalculateCRC(newData)) return uint32(RSSP_I_C2_CRC32.CalculateCRC(data))
} }
func reverseBitsInByte(data []byte) []byte { //func reverseBitsInByte(data []byte) []byte {
var result byte // var result byte
newData := make([]byte, len(data)) // newData := make([]byte, len(data))
for i, b := range data { // for i, b := range data {
result = 0 // result = 0
for i := 0; i < 8; i++ { // for i := 0; i < 8; i++ {
result <<= 1 // result <<= 1
result |= b & 1 // result |= b & 1
b >>= 1 // b >>= 1
} // }
newData[i] = result // newData[i] = result
} // }
return newData // return newData
} //}