APP4 S5
Embed:
(wiki syntax)
Show/hide line numbers
crc.cpp
00001 00002 #include "crc.h" 00003 00004 #define POSSIBLE_VALUES 256 00005 00006 char crc_table[POSSIBLE_VALUES]; 00007 00008 void init_crc_module() 00009 { 00010 /* iteration sur toutes la valeurs possible de CRC pour le valeurs de byte possible */ 00011 for (int i = 0; i < POSSIBLE_VALUES; i++) 00012 { 00013 char current_byte = (char)i; 00014 /* calcul de la valeur de CRC pour le byte actuel a l'aide des operations bit a bit avec XOR */ 00015 for (char bit = 0; bit < 8; bit++) 00016 { 00017 /* lorsque la valeur du MSB est 1, on execute le XOR en plus du decalage */ 00018 if ((current_byte & 0x80) != 0) 00019 { 00020 current_byte = current_byte << 1; 00021 current_byte ^= CRC_GEN_NUM; 00022 } 00023 else 00024 { 00025 current_byte = current_byte << 1; 00026 } 00027 } 00028 /* en ajoute cette valeur a la table des valeurs pre calculees */ 00029 crc_table[i] = current_byte; 00030 } 00031 } 00032 00033 char get_crc_value(char* buffer, int buffer_length) 00034 { 00035 char crc = 0; 00036 for (int i = 0; i < buffer_length; i++) 00037 { 00038 /* get current CRC value = remainder */ 00039 crc = crc_table[buffer[i] ^ crc]; 00040 } 00041 00042 return crc; 00043 }
Generated on Thu Jul 21 2022 17:35:45 by
1.7.2