5. OUTPUT FORMAT
REF : M18-SM-001 Rev 02
Page 36/68 Copyright© Orphée SA. All Rights Reserved. MYTHIC 18
Indix = byte divided by 16
Indix = Indix XOR CRC
Indix = Indix AND 000F
CRC = Table(Indix) XOR (CRC divided by 16)
Example in C language:
/*Hash table :*/
static const unsigned short ausCrcTab1[] =
{
0x0000, 0xCC01,0xD801,0x1400,0xF001,0x3C00,0x2800,0xE401,
0xA001,0x6C00,0x7800,0xB401,0x5000,0x9C01,0x8801,0x4400,
};
/* CRC computing */
unsigned short calc_crc(unsigned char *pucData, long lSize)
{
unsigned short usAcc1 = 0xFFFF;
while ( lSize > 0 )
{
/* gestion par quartet du calcul */
usAcc1 = ausCrcTab1[(*pucData ^ usAcc1) & 15] ^ (usAcc1 >> 4);
usAcc1 = ausCrcTab1[((*pucData >> 4) ^ usAcc1) & 15] ^ (usAcc1 >> 4);
pucData++;
lSize--;
}
return(usAcc1);
}
^ : XOR.
>> : Logical shift right.
& : logical AND.