Ejemplos en C y BASIC para el cálculo del CRC-16
Función para generar CRC-16 en C
La función tiene dos argumentos:
unsigned char* pMsg : Un puntero al mensaje.
unsigned short sLen : La cantidad de bytes que contiene el mensaje.
unsigned short CRC16( unsigned char* pMsg, unsigned short sLen)
{
unsigned bit, crc, flag;
crc = 0xFFFF;
while( sLen > 0 ) {
}
return( crc );
}
'Cálculo del CRC
'NOTA: Aunque el CRC es un INTEGER, se trabaja con LONG con el fin de poder tratar
el bit de más peso de un entero (el de signo) sin problemas. BASIC no maneja
números sin signo.
Function CRC16( Datos As String ) As Long
Dim flag
Dim crc As Long
Dim car As Integer
Dim bit
crc = &hFFFF&
For car = 1 To Len( Datos )
Next car
CRC16 = crc
End Function
14
crc ^= *(( unsigned char* )pMsg );
for( bit = 0; bit < 8; bit++ ) {
flag = crc & 1;
crc >>= 1;
if( flag == 1 ) crc ^= 0xA001;
}
pMsg++;
sLen++;
As Long
As Integer
crc = crc Xor Asc(Mid$( Datos, car, 1 ))
For bit = 0 To 7
flag = crc And &h1&
crc = crc \ 2&
If flag = 1& Then crc = crc Xor &hA001&
Next bit