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.
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 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.
> 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
Le Tout est souvent plus grand que la somme de ses parties.
@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 :
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.
> 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); }
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.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.