Bonjour à tous

Je suis en train de coder un programme qui encode un octet envoyé en codage de hamming avec contrôle de parité, puis qui corrige automatiquement l'erreur dans le code.

Voici mon programme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
 
}
J'ai testé avec les nombres de 1 à 7, le codage marche (mais pas la correction d'erreur : il m'en trouve une), en revanche le 8, 9 et au-dessus ça ne marche pas. Par exemple 9 en codage de hamming donne 0x19 et j'obtiens 0x69 avec mon programme.

Merci pour votre aide

Bonne journée