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 :

Binaire vers Hexa et inversement


Sujet :

C

  1. #21
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    Quelque chose me taraude: pourquoi saisir un type entier (format: "%d") plutôt qu'une chaîne: (format: "%s") ?
    Parce qu'on avait de bonnes raisons de penser que ce n'était pas ce qu'il cherchait à faire en réalité. Il semblerait bien que si, en fin de compte.

    Citation Envoyé par Antoinejdu44 Voir le message
    Quand je rentre 101 (5), le 5 est bien affiché mais ensuite, j'ai un 6
    Quand je rentre 1000 (8), le 8 est affiché mais après, j'ai E et 3 :/
    Puisqu'on t'a fait faire un scanf("%d"), le nombre à saisir doit être décimal ! C'est une fois stocké dans ta variable qu'il l'est sous forme binaire. Sachant cela, les résultats sont cohérents.

    − 101d = Cent un = 65h ;
    − 1000d = Mille = 3e8h.

    Ça colle. Si ce que tu voulais faire était réellement convertir un nombre binaire saisi comme tel depuis le clavier, alors il faut faire comme Neitsa te l'a dit, à savoir extraire les bits un à un et les cumuler par quatre pour former à chaque fois un index dans ton tableau.

  2. #22
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Merci de votre aide

    @Obsidian : C'est bel et bien un nombre binaire saisi par le clavier que je souhaite "convertir" en notation hexadécimal

    Donc, ça c'est faux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    scanf("%d", &nb);
     
    while (nb > 0)
    {
     
           x = nb & 15;
           printf ("%c\n", hexa[x]);
     
    	nb >>= 4;
     
    }
    Citation Envoyé par Neitsa Voir le message
    ....

    Je serais plutôt partisan d'utiliser un format de chaine pour scanf (%s) et de traiter chaque caractère avec un masque de 1 bit.

    "1001" => 0x31 0x30 0x30 x31 => (masque 'ET' binaire de 1) => 1 0 0 1

    A partir de là, il ne reste plus qu'a traiter les bits en paquets de 4.
    Il n'y aurai pas une solution un peu plus simple (par exemple, une solution algorithmique), car je débute en C et j'essaye de faire des petits projets en utilisant des algorithmes (ce que je vois en cours de maths en ce moment )

  3. #23
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je te propose ceci :
    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
    *1- Définir un tableau char const Hexa[]= "0123456789abcdef"
    
    *2 Lire la chaine  de caractères dans un tableau, par exemple avec fgets()
    
     Définitions :
    - R le nombre de bits significatifs dans le chiffre hexa de poids fort
    - Q le nombre total de chiffres hexa
    - N la longueur de la chaine 
    
    *3- Calcul de N, R et Q :
       1- Calculer N (fonction strlen)
       2- R <- reste de la division de N par 4
       3- Q <- quotient de la division de N par 4
       4- Si R != 0 incrémenter Q
          Sinon R <- 4
    
    *4- Sortie des valeurs :
       1-  Se placer sur le premier caractère de la chaine
       2-  Faire Q fois :
           1- initialiser un entier val à 0
           2- Faire R fois :
              1- val <- 2* val
              2- si le caractère pointé est '1' : val <- val+1
              3- aller au caractère suivant
           3- R <- 4
           4- Le caractère hexa est Hexa[val]
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #24
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Merci

    Mais, je ne comprend ce que signifie les "<-"

    Pour le tableau est-ce que cela suffit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char hexa[] = "0123456789ABCDEF";
    ou il faut rajouter obligatoirement

    ?

    *2 Lire la chaine de caractères dans un tableau, par exemple avec fgets()
    Lorsque tu dis ça, la chaine de caractères dans le tableau, c'est le nombre binaire saisi par l'user ?

  5. #25
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    1*) Non tu n'es pas obligé de rajouter le 'const'. C'est juste pour éviter de modifier la chaîne par mégarde.

    2*) Oui c'est le nombre saisi par l'utilisateur. C'est plus facile de récupérer un nombre en tant que chaîne de caractères plutôt qu'un nombre tel quel. Enfin, c'est plus facile à traiter (je trouve).
    Plus tu pédales moins fort, moins t'avances plus vite.

  6. #26
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Okey, merci, je vais tester ça demain

  7. #27
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    a <- b : donner à a la valeur b.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  8. #28
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Merci

    Par contre, j'ai un problème avec fegts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     error LNK2019: symbole externe non résolu _fegts référencé dans la fonction _main
    Je l'utilise comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #define TAILLE_MAX 1000
     
    char nbBinaire[100];
    char tableau [TAILLE_MAX] = "";
     
    scanf("%s", &nbBinaire);
    fegts(tableau, TAILLE_MAX, nbBinaire);
    Si, j'ai bien compris les cours sur cette fonction, elle lit le nombre de caractères "TAILLE_MAX" sur "nbBinaire" et le stocke dans "tableau"

    J'ai trouvé une autre solution pour lire une chaine

    Est-ce qu'elle marche dans cet exemple à la place de fgets ?

  9. #29
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Par contre, j'ai un problème avec fegts
    Normal : fegts n'existe pas... au contraire de fgets.

    edit :

    N'utilisez jamais gets(). Comme il est impossible de
    savoir à l'avance combien de caractères seront lus par
    gets(), et comme celui-ci écrira tous les caractères lus,
    même s'ils débordent du buffer, cette fonction est
    extrèmement dangereuse à utiliser. On a déjà utilisé ce
    dysfonctionnement pour créer des trous de sécurité.
    UTILISEZ TOUJOURS fgets() A LA PLACE DE gets().

  10. #30
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Aussi, si tu n'as pas un warning dès la compilation sur "fegts", c'est que ton compilateur est mal configuré.
    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.

  11. #31
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s", &nbBinaire);
    - Pourquoi fais-tu un scanf et un fgets ?
    - Dans le scanf, l'argument doit être nbBinaire et pas &nbBinaire : nbBinaire est déjà l'adresse de destination (c'est l'identificateur d'un tableau)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  12. #32
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Encore merci de votre aide

    Il me semble que le scanf() recupère une valeur ou chaine saisie, et le fgets lit une chaine

    Donc, je récupère la chaine puis je la lis avec le fgets

    J'ai tapé un petit bout de code, mais il y a une erreur au niveau du fgets ..

    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
    char nbBinaire[100] = {0};
    char const hexa[] = "0123456789ABCDEF";
    char tableau[TAILLE_MAX] = "";
     
    int N = 0; 
    int R;
    int Q;
    int val;
    int nbFois;
    int i = 0;
     
    scanf("%s", nbBinaire);
     
    fgets(tableau, TAILLE_MAX, nbBinaire);
     
    N = strlen(nbBinaire);
    R = N % 4;
    Q = N / 4;
     
    if (R !=0)
    {
    	Q++;
    }
     
    R = 4;
     
    nbBinaire [0];
     
    if (nbFois !=Q)
    {
    	val = 0;
     
    	if (nbFois !=R)
    	{
    		val = 2* val;
     
    		if (nbBinaire[i] = 1)
    		{
    			val = val+1;
    		}				
    		i++;
     
    		R--;
    	}
     
    	R = 4;
     
    printf("%s", hexa[val]);
    Q--;
    Voila

  13. #33
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    scanf("%s", nbBinaire);
     
    fgets(tableau, TAILLE_MAX, nbBinaire);
    Non, fgets lit sur un fichier!
    Ces deux lignes doivent être remplacées par la lecture de la ligne tapée au clavier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets(nbBinaire, 100, stdin );
    - ne fait rien du tout. à supprimer
    - nbfois est non initialisé !
    La { de ce if n'est pas fermée

    - ....
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  14. #34
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Citation Envoyé par Antoinejdu44 Voir le message
    Donc, je récupère la chaine puis je la lis avec le fgets
    Ce sont deux manières différentes de dire la même chose et, par conséquent, tes fonctions se font concurrence.

    − fgets() va lire l'entrée standard jusqu'à trouver un délimiteur (un retour à la ligne, une fin de fichier…) et déposer tout ce qu'elle lit dans un buffer ;
    − scanf() va lire la même entrée standard à la recherche de quelque chose de plus structurée, selon un format que tu lui passes en argument. Ce format étant « %s » en l'occurrence, scanf() va rechercher « une chaîne » et sera équivalente, dans ce cas précis, à fgets().

    Ça veut dire aussi que la première fonction appelée va lire la chaîne et que la seconde n'aura plus rien à lire.

  15. #35
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Merci vos réponses

    Citation Envoyé par diogene Voir le message
    La { de ce if n'est pas fermée
    - ....
    J'ai simplement oublié de la copier

    Sinon, j'ai essayé de corriger les erreurs, voici où j'en suis maintenant

    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
           char nbBinaire[100] = {0};
     
    	        char const hexa[] = "0123456789ABCDEF";
     
                 	int N = 0; 
    	        int R = 0;
    	        int Q = 0;
             	int val = 0;
    	        int nbFois = 0 ;
    	        int i = 0;
     
     
                   fgets(nbBinaire, 100, stdin);
     
    		N = strlen(nbBinaire);
    		R = N % 4;
    		Q = N / 4;
     
    		if (R !=0)
    		{
    			Q++;
    		}
     
    		R = 4;
     
    		*(nbBinaire); \\ Je ne sais pas comment se placer sur le 1er caractère de la chaine ..
     
    		if (nbFois !=Q)
    		{
    			val = 0;
     
    			if (nbFois !=R)
    			{
    				val = 2* val;
     
    				if (nbBinaire[i] = 1)
    				{
    					val = val+1;
    				}				
    				i++;
     
    				R--;
    			}
     
    			R = 4;
     
    			printf("%s", hexa[val]);
    			Q--;
     
    		}

  16. #36
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    -
    *3- Calcul de N, R et Q :
    ....
    4- Si R != 0 incrémenter Q
    Sinon R <- 4
    Le code que tu propose ne fait pas ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (R !=0)
    {
       Q++;
    }
     
    R = 4;
    -
    *(nbBinaire); \\ Je ne sais pas comment se placer sur le 1er caractère de la chaine ..
    Puisque tu repères les éléments du tableau avec i pour indice, il suffit de faire i = 0.

    -Ta gestion des "nbFois" est erronée.
    Pour exécuter N fois une portion de code, on écrit (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(indice =0; indice <N; indice++)
    {
    // le code à exécuter N fois
    }
    -Lorsque tu postes du code, fais un copier-coller sans oublier le début ni la fin
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  17. #37
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Merci

    J'ai corrigé les erreurs, le compilateur ne produit aucune erreur, mais la conversion est erronée

    Par exemple; pour 101 saisi en binaire, j'ai F qui s'affiche ..
    Je ne comprend pas comment ma variable "val" peut arriver a 15

    Voici le code

    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
     
    	char nbBinaire[100] = {0};
    	char buf[256] = {0};
    	char const hexa[] = "0123456789ABCDEF";
     
    	int N = 0; 
    	int R = 0;
    	int Q = 0;
    	int val = 0;
     
    	int i = 0;
    	int indice = 0;
     
     int main()
    {
     
                   fgets(nbBinaire, 100, stdin);
     
    		N = strlen(nbBinaire);
    		R = N % 4;
    		Q = N / 4;
     
    		if (R !=0)
    		{
    			Q++;
    		}
    		else 
    		{
    			R = 4;
    		}
     
    		nbBinaire[i];
     
    		for (indice = 0; indice < Q; indice++)
    		{
    			for (indice = 0; indice < R; indice++)
    			{
    				val = 2* val;
     
    				if (nbBinaire[i] = 1)
    				{
    					val = val+1;
    				}				
    				i = i++;
    			}
     
    			R = 4;
    			printf("%c", hexa[val]);			
    		}
    }

  18. #38
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fgets(nbBinaire, 100, stdin); 
    N = strlen(nbBinaire);
    Attention, fgets met aussi le caractère de fin de ligne '\n' dans le buffer, donc il faut retrancher 1 à la valeur obtenue par strlen.

    - N'a aucune action et tu peux le supprimer

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (indice = 0; indice < Q; indice++)
    {
        for (indice = 0; indice < R; indice++)
       {
    Evidemment, la variable de comptage de boucles ne doit pas être la même pour les deux for()

    - i = i+1 ou i++ tout simplement
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  19. #39
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Points : 521
    Points
    521
    Par défaut
    Merci

    Mais, au niveau du nbBinaire[i]; j'essaye de me placer sur le 1er caractère de la chaine mais je ne sais pas comment faire :/

    Je sais comment afficher le 1er caractère de la chaine, mais, je ne sais pas comment se placer dessus :/

    Voila le code

    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
     
    	char nbBinaire[100] = {0};
    	char const hexa[] = "0123456789ABCDEF";
     
    	int N = 0; 
    	int R = 0 ;
    	int Q = 0;
    	int val = 0;
     
    	int i = 0;
    	int indice1 = 0;
    	int indice2 = 0;
     
                  fgets(nbBinaire, 100, stdin);
     
    		N = strlen(nbBinaire);
    		N = N - 1;
    		R = N % 4;
    		Q = N / 4;
     
    		if (R !=0)
    		{
    			Q++;
    		}
    		else 
    		{
    			R = 4;
    		}
     
    		//ICI = Se placer sur 1er caractère de la chaine
     
    		for (indice1 = 0; indice1 < Q; indice1++)
    		{
    			for (indice2 = 0; indice2 < R; indice2++)
    			{
    				val = 2* val;
     
    				if (nbBinaire[i] = 1)
    				{
    					val = val+1;
    				}				
    				i++;
    			}
     
    			R = 4;
    			printf("%c", hexa[val]);			
    		}

  20. #40
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Mais, au niveau du nbBinaire[i]; j'essaye de me placer sur le 1er caractère de la chaine mais je ne sais pas comment faire :/
    J'ai déjà répondu à cela : ta variable i repère le caractère de ta chaine. Donc faire i=0 te place sur le premier, i++ va te placer sur le deuxième etc. C'est correct dans ton code.

    L'erreur est ici :
    - l'opérateur de comparaison est == . Ce n'est pas = qui est l'opérateur d'assignation.
    - tu lis des caractères, tu dois comparer avec le caractère '1', pas avec l'entier 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (nbBinaire[i] == '1')
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Question de binaire : mot hexa norme Ff <-> fF
    Par psylox dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 07/05/2007, 12h29
  2. fichier texte dos vers linux et inversement
    Par mencaglia dans le forum C++
    Réponses: 4
    Dernier message: 23/09/2006, 11h59
  3. Problème de conversion decimal vers Hexa
    Par Elbarto dans le forum C++
    Réponses: 1
    Dernier message: 06/02/2006, 19h37
  4. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  5. [langage] conversion décimal vers hexa
    Par chipster dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2004, 16h05

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