Partage
  • Partager sur Facebook
  • Partager sur Twitter

conversions decimal à l'hexadecimal

Sujet résolu
    21 novembre 2022 à 20:05:56

    Bonsoir, 

    Dans cet exercice nous avons pas le droit d'utiliser %x, les tableaux et les fonctions  

    Une adresse IP est un nombre de 32 bits identifiant une machine connectée à un réseau. Ce nombre est décomposable en 4 valeurs hexadécimales (correspondant à 4 octets). Par exemple, le nombre FFFF0000 (en hexadécimal) correspond à l'adresse : FF.FF.00.00.

    Construire un programme permettant de :

    • de saisir un nombre entier en base 10 • de l'afficher en base 16

    • d'afficher les valeurs des 4 octets qui le constituent en base 10 et en base 16

    • de taper un nombre en hexadécimal (il faudra saisir des caractères) et de reconstituer le nombre en base 10 qui le constitue. 

    • Partager sur Facebook
    • Partager sur Twitter
      21 novembre 2022 à 20:21:43

      Et c'est quoi la question ?

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        21 novembre 2022 à 20:23:42

        @rouIoude 

        Comment c'est possible de convertir decimale en hexadecimale sans %x, les tableaux et les fonctions  

        je sais qu'il faut diviser par 16 mais je vois pas comment ? 


        -
        Edité par fbbfoizebjiofzeujiof 21 novembre 2022 à 20:25:12

        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2022 à 20:34:58

          Pour diviser par 16

             quotient = nombre / 16;

          • Partager sur Facebook
          • Partager sur Twitter
            21 novembre 2022 à 20:54:40 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


              21 novembre 2022 à 21:14:28

              Bonjour,

              Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
              Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

              Pour plus d'informations, nous vous invitons à lire les règles générales du forum

              Merci de colorer votre code à l'aide du bouton Code

              Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

              Merci de modifier votre message d'origine en fonction.

              Liens conseillés

              • Partager sur Facebook
              • Partager sur Twitter
                22 novembre 2022 à 0:48:31

                > de saisir un nombre entier en base 10 • de l'afficher en base 16
                Une fois saisi, le nombre n'est plus en base 10, il est en format interne qu'on pourrait qualifier abusivement de "binaire",
                Avec des décalages successif appropriés (>>) on peut extraire les tranches de 4 bits et indexer dans une chaîne.

                On peut aussi diviser par des puissances décroissantes de 16

                chiffre = nombre / puissance % 16

                Pourquoi décroissantes? Pour avoir les chiffres les plus significatifs en premier.

                Est-ce qu'une chaîne est un tableau pour ton prof? Il faudra séparer les nombres de 0 à 9 de ceux entre 10 et 15
                > de taper un nombre en hexadécimal (il faudra saisir des caractères) et de reconstituer le nombre en base 10 qui le constitue.
                On fait à peu près l'inverse. Il faut identifier les caractères '0' à '9' et 'A' à 'F' (ou 'a' à 'f')

                -
                Edité par PierrotLeFou 22 novembre 2022 à 2:30:01

                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  22 novembre 2022 à 11:45:05

                  Voici mon code mais il est incomplet désolé je suis débutant veuillez pour mes futures erreurs
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 novembre 2022 à 13:45:13

                    fbbfoizebjiofzeujiof a écrit:

                    Voici mon code mais il est incomplet désolé je suis débutant veuillez pour mes futures erreurs


                    En effet il a l'air incomplet. Avançons un peu

                    #include <studio.h>
                    
                    int main ()
                    { 
                       printf("Donnez un entier :\n");
                       
                       return 0;
                    }



                    -
                    Edité par michelbillaud 22 novembre 2022 à 13:45:34

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 novembre 2022 à 14:39:13

                      @fbbfoizebjiofzeujiof : on ne voit ton code nulle part.

                      Je suppose que l'interdiction d'utiliser "les fonctions" concerne celle d'utiliser les fonctions de bibliothèque standard du langage C et que l'on peut donc créer ses propres fonctions.

                      Du coup, comme point de départ, je ferais plutôt :

                      #include <stdint.h>
                      #include <string.h>
                      #include <assert.h>
                      
                      char * uint32_to_hex_string(char * str, uint32_t nombre) {
                              /* TODO */
                              return str;
                      }
                      
                      int main(void) {
                              char str[256] = { '\0' };
                              uint32_t nombre = 4294901760;
                              assert(strcmp(uint32_to_hex_string(str, nombre), "FFFF0000") == 0);
                      
                              return 0;
                      }

                      Comme les adresses IPv4 correspondent à un entier 32 bits non signé, j'utiliserais un type approprié comme uint32_t pour les nombres entiers de 32 bits non signés.

                      Le code ci-dessus est un début si on commence par la première demande de l'énoncé.

                      Cela dit, il pourrait être préférable de commercer par la deuxième, car elle semblerait comprendre un cheminement utile, en partie, pour résoudre la première.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 novembre 2022 à 22:58:52

                        > de saisir un nombre entier en base 10 • de l'afficher en base 16
                        On ne dit pas la grandeur du nombre. < 256 ?
                        Voici un petit code pour afficher avec le minimum de fonctions, et pas de tableau ni de chaîne.
                        Je garantis au moins 2 digits.
                        -
                        #include <stdio.h>
                        void display(int n) {
                            int max = (sizeof(int) * 8 - 1) / 4;   // Nombre de "quadruplets" (ou tétrets ...)
                            int p = 1;
                            for(int i = 0; i < max; i++) p *= 16;   // pow? Connais pas ...
                            int nz = 0;
                            while(p > 0) {
                                int d = n / p % 16;
                                p /= 16;
                                char c = d;
                                // Pas besoin de chaînes de caractères.
                                if(d < 10) c = c + '0'; else c = c + 'A' - 10;
                                if(nz > 0 || d > 0) nz++;
                                if(p < 16) nz++;   // Garantir 2 chiffres.
                                if(nz > 0) putchar(c);
                            }
                            putchar('\n');
                        }
                         
                        int main(void) {
                            puts("Entrez un nombre");
                            int n;
                            scanf("%d", &n);
                            display(n);
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                        conversions decimal à l'hexadecimal

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown