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 过程 ,谢谢大侠了

解决方案 »

  1.   

    'WORD wCrcReg; /* globale variable */ 
    '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吗?
      

  2.   

    http://www.80diy.com/home/20050121/13/3743624.html
      

  3.   

    http://wind2825.spaces.live.com/Blog/cns!F432814521F67C10!3173.entry