1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include <stdio.h>
void main(void) {
unsigned char octet = 9;
unsigned char parite, paritec1, paritec2, paritec3, i, bit_a_corriger = 0;
for(i=0;i<8;i++) {
if(octet & (1u<<i))
printf("1");
else
printf("0");
}
printf("\n\n");
/* Controle de C1 */
parite = ((octet>>0) & 1) + ((octet>>2) & 1) + ((octet>>4) & 1);
if(parite%2 != 0) {
octet = octet | 0x40;
paritec1 = 1;
}
else {
octet = octet & 0xAF;
paritec1 = 0;
}
printf("C1 = %u\n", paritec1);
/* Controle de C2 */
parite = ((octet>>0) & 1) + ((octet>>1) & 1) + ((octet>>4) & 1);
if(parite%2 != 0) {
octet = octet | 0x20;
paritec2 = 1;
}
else {
octet = octet & 0xDF;
paritec2 = 0;
}
printf("C2 = %u\n", paritec2);
/* Controle de C3 */
parite = ((octet>>0) & 1) + ((octet>>1) & 1) + ((octet>>2) & 1);
if(parite%2 != 0) {
octet = octet | 0x08;
paritec3 = 1;
}
else {
octet = octet & 0xF7;
paritec3 = 0;
}
printf("C3 = %u\n", paritec3);
printf("octet codé : %x\n", octet);
for(i=0;i<8;i++) {
if(octet & (1u<<i))
printf("1");
else
printf("0");
}
printf("\n\n");
/* Correction d'erreur */
bit_a_corriger = paritec1 + paritec2*2 + paritec3*4;
printf("le bit faux est %d\n", bit_a_corriger);
if(octet & (1u << bit_a_corriger))
octet = octet | (1u << bit_a_corriger);
else
octet = octet & ~(1u << bit_a_corriger);
printf("code hamming corrigé : %x\n", octet);
} |
Partager