IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Fonction hexadecimal => binaire


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Par défaut Fonction hexadecimal => binaire
    Bonjour,
    Je viens d'écrire une fonction hexa=>binaire: mais j'ai un problème dans la fonction main. Mais je ne vois pas où...Pouvez vous m'aidez svp?
    Merci.

    Ps: Une ligne de flecture est constitué de 8 caractère hexadécimale.

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    void hexaBinaire (char caractereLu, int *x3, int *x2, int *x1, int *x0){
     
        switch (caractereLu) {
     
            case '0':
            *x3 = 0; *x2 = 0; *x1 = 0; *x0 = 0;
            break;
     
            case '1':
            *x3 = 0; *x2 = 0; *x1 = 0; *x0 = 1;
            break;
     
            case '2':
            *x3 = 0; *x2 = 0; *x1 = 1; *x0 = 0;
            break;
     
            case '3':
            *x3 = 0; *x2 = 0; *x1 = 1; *x0 = 1;
            break;
     
            case '4':
            *x3 = 0; *x2 = 1; *x1 = 0; *x0 = 0;
            break;
     
            case '5':
            *x3 = 0; *x2 = 1; *x1 = 0; *x0 = 1;
            break;
     
            case '6':
            *x3 = 0; *x2 = 1; *x1 = 1; *x0 = 0;
            break;
     
            case '7':
            *x3 = 0; *x2 = 1; *x1 = 1; *x0 = 1;
            break;
     
            case '8':
            *x3 = 1; *x2 = 0; *x1 = 0; *x0 = 0;
            break;
     
            case '9':
            *x3 = 1; *x2 = 0; *x1 = 0; *x0 = 1;
            break;
     
            case 'a':
            case 'A':
            *x3 = 1; *x2 = 0; *x1 = 1; *x0 = 0;
            break;
     
            case 'b':
            case 'B':
            *x3 = 1; *x2 = 0; *x1 = 1; *x0 = 1;
            break;
     
            case 'c':
            case 'C':
            *x3 = 1; *x2 = 1; *x1 = 0; *x0 = 0;
            break;
     
            case 'd':
            case 'D':
            *x3 = 1; *x2 = 1; *x1 = 0; *x0 = 1;
            break;
     
            case 'e':
            case 'E':
            *x3 = 1; *x2 = 1; *x1 = 1; *x0 = 0;
            break;
     
            case 'f':
            case 'F':
            *x3 = 1; *x2 = 1; *x1 = 1; *x0 = 1;
            break;
        }
    }
     
    int main(){
        char hexa[2];
        int binaire[3];
        char caractereLu = 0;
        char*buf[5000];
        /* On ouvre le fichier Hexa.hex contenant les caractères à convertir */
        FILE* flecture = fopen("machine.txt","r");
        int i=0;
     
        if (fgets(buf, 4999,flecture) == NULL){
            fprintf(stderr,"%s","Erreur : le fichier que vous chercher a lire est vide.");
            fclose(flecture);
            return (EXIT_FAILURE);
        }
     
        while (fgets(buf, 4999,flecture)){
     
            while(buf[i]){
                i=0;
                caractereLu = buf[i];
     
     
                    /* On vérifie que le caractère lu soit bien en valeur hexadécimale */
                    if ( (caractereLu >= 'a') && (caractereLu <= 'f') ){
     
                        if ( (caractereLu)){
                            hexa[0] = caractereLu;
     
                            hexaBinaire(&hexa[0], &binaire[3], &binaire[2], &binaire[1], &binaire[0]);
     
                            printf("%d%d%d%d",binaire[3],binaire[2],binaire[1],binaire[0]);
                        }
     
                    } else if ( (caractereLu >= '0') && (caractereLu <= '9') ){
     
                       if ( (caractereLu)){
     
                            hexa[0] = caractereLu;
     
                            hexaBinaire(&hexa[0], &binaire[3], &binaire[2], &binaire[1], &binaire[0]);
     
                            printf("%d%d%d%d",binaire[3],binaire[2],binaire[1],binaire[0]);
                        }
                    }
     
                    i++;
     
            }
            printf('\n');
            i=0;
        }
     
        fclose(flecture);
     
        return (EXIT_SUCCESS);
    }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Par défaut
    Beaucoup plus amélioré pour le main (mais j'ai gardé la fonction hexaBinaire). Mon problème à présent c'est que ça n'affecte rien au tableau binaire...

    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
    int main(){
        char buf[5000];
        char ** binaire;
        int ligne, i=0, j=0;
     
        FILE* flecture = fopen("machine.txt","r");
     
     
        if (fgets(buf, 4999,flecture) == NULL){
            fprintf(stderr,"%s","Erreur : le fichier que vous chercher a lire est vide.");
            fclose(flecture);
            return (EXIT_FAILURE);
        }
        rewind (flecture);
     
        while(fgets(buf,4999,flecture)){
            ligne++;
        }
        rewind (flecture);
     
        binaire= (char**)malloc(ligne*sizeof(char*));
        for(i=0; i<ligne;i++){
            binaire[i]=(char*)malloc(32*sizeof(char));
        }
     
     
        for(i=0;i<ligne; i++){
            fgets(buf,4999,flecture);
     
            for(j=0;j<8;j++){
                hexaBinaire(buf[j],&binaire[i][4*j+3], &binaire[i][4*j+2], &binaire[i][4*j+1], &binaire[i][4*j]);
            }
        }
     
        rewind(flecture);
        fclose(flecture);
        printf("%d",binaire[0][1]);
     
     
     
     
     
        fclose(flecture);
     
        return (EXIT_SUCCESS);
    }

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Tu as un tableau de char, mais appelles une fonction demandant des pointeurs de int. Il devrait y avoir des sizeof(int) (ou sizeof une_variable_de_type_int) quelque part dans le code, or je n'en vois aucun...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. fonction convertissant en binaire
    Par isa3000 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 23/03/2012, 17h39
  2. Hexadecimal en binaire
    Par bsangoku dans le forum Débuter
    Réponses: 6
    Dernier message: 12/01/2010, 15h30
  3. Hexadecimal et binaire
    Par Voldemort09 dans le forum Bibliothèque standard
    Réponses: 4
    Dernier message: 06/04/2008, 21h00
  4. Conversion Hexadecimal to binaire
    Par marco80 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/05/2007, 10h35
  5. Conversion binaire -> hexadecimal
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 06/08/2003, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo