WORD wCrcReg; /* globale variable */
void CrcPreset( void ) /* starting condition when building the CRC-Checksum */
{
wCrcReg = 0xffff;
}
WORD Reverse(WORD Word) /* Inverting the CRC-Rest */
{
WORD i;
WORD OverFlow = 0;
for (i = 0; i < 16; i++)
{
OverFlow |= ((Word & (WORD)0x8000) >> (15-i));
Word <<= (WORD)1;
}
return(OverFlow);
}void CrcByteIn(UBYTE next_byte) /* Byte added to the CRC-Checksum */
{
BYTE count;
WORD feedback;
WORD Mask = 0;
for (count = 0; count < 8; count ++)
{
feedback = (wCrcReg >> (WORD)15);
feedback ^= (WORD)next_byte;
feedback &= 1;
Mask = feedback;
Mask |= (feedback << (WORD)12);
Mask |= (feedback << (WORD)5);
wCrcReg <<= 1;
wCrcReg ^= Mask;
next_byte >>= 1;
};
}UWORD CrcRead(void) /* Have all Bytes been received the Checksum
can be found in the CrcReg */
{
return(wCrcReg); /* CrcReg = 0 if transmission is ok! */
}这是一个CRC 过程 ,谢谢大侠了
void CrcPreset( void ) /* starting condition when building the CRC-Checksum */
{
wCrcReg = 0xffff;
}
WORD Reverse(WORD Word) /* Inverting the CRC-Rest */
{
WORD i;
WORD OverFlow = 0;
for (i = 0; i < 16; i++)
{
OverFlow |= ((Word & (WORD)0x8000) >> (15-i));
Word <<= (WORD)1;
}
return(OverFlow);
}void CrcByteIn(UBYTE next_byte) /* Byte added to the CRC-Checksum */
{
BYTE count;
WORD feedback;
WORD Mask = 0;
for (count = 0; count < 8; count ++)
{
feedback = (wCrcReg >> (WORD)15);
feedback ^= (WORD)next_byte;
feedback &= 1;
Mask = feedback;
Mask |= (feedback << (WORD)12);
Mask |= (feedback << (WORD)5);
wCrcReg <<= 1;
wCrcReg ^= Mask;
next_byte >>= 1;
};
}UWORD CrcRead(void) /* Have all Bytes been received the Checksum
can be found in the CrcReg */
{
return(wCrcReg); /* CrcReg = 0 if transmission is ok! */
}这是一个CRC 过程 ,谢谢大侠了
'void CrcPreset( void ) /* starting condition when building the CRC-Checksum */
'{
'wCrcReg = 0xffff;
'} dim wCrcReg as longprivate sub CrcPreset()
wCrcReg = -1
End Sub'WORD Reverse(WORD Word) /* Inverting the CRC-Rest */
'{
'WORD i;
'WORD OverFlow = 0;
'for (i = 0; i < 16; i++)
'{
'OverFlow |= ((Word & (WORD)0x8000) >> (15-i));
'Word < <= (WORD)1;
'}
'return(OverFlow);
'}
Private Function Reverse( ByVal word As Integer) As Integer
Dim i As long
Dim overflow As long
overflow=0
For i = 0 To 15
overflow=overflow*2
overflow = overflow Or ( word \(2^i) And 1)
Next i
Reverse = CInt(overflow)
End Functionvoid CrcByteIn(UBYTE next_byte) /* Byte added to the CRC-Checksum */
{
BYTE count;
WORD feedback;
WORD Mask = 0;
for (count = 0; count < 8; count ++)
{
feedback = (wCrcReg >> (WORD)15);
feedback ^= (WORD)next_byte;
feedback &= 1;
Mask = feedback;
Mask |= (feedback < < (WORD)12);
Mask |= (feedback < < (WORD)5);
wCrcReg < <= 1;
wCrcReg ^= Mask;
next_byte >>= 1;
};
} UWORD CrcRead(void) /* Have all Bytes been received the Checksum
can be found in the CrcReg */
{
return(wCrcReg); /* CrcReg = 0 if transmission is ok! */
} 这是一个CRC 过程 ,谢谢大侠了
真不如直接找一个现在的crc过程,你不就是想要crc16吗?