2010-06-27 21 views
2

J'essaie de convertir un nombre entier décimal en hexadécimal. J'ai fait beaucoup de recherches en ligne et j'ai trouvé plusieurs façons de le faire. Cependant, chaque façon que j'ai trouvé convertit en une chaîne; par exemple, je peux convertir 100 en "64". Ce n'est pas ce que je dois faire. Je veux être en mesure de convertir 100 en '0x64', ce qui est une question entièrement différente. Pour une raison quelconque, je soupçonne la réponse d'être extrêmement simple, mais je n'arrive pas à la trouver/m'en souvenir. J'écris dans le langage de programmation C, juste pour clarifier. Toute aide ou idée serait très appréciée.Comment convertir un nombre entier décimal en un seul caractère hexadécimal? (C)

Merci, Hassan

+0

Je suis triste de l'admettre, mais je l'ai écrit une série de méthodes qui font ce que vous décrivez en analysant l'hexagone-corde à son nombre équivalent. J'en avais besoin pour créer une calculatrice graphique pour vérifier les conversions à virgule flottante d'un ancien format obscur vers le format IEEE courant/commun. Je partagerais le code mais il est écrit en C#. –

Répondre

5

Vous ne pouvez pas "convertir" un nombre de décimal en hexadécimal car c'est ... un nombre (généralement stocké dans la mémoire comme two's complement). Toutes les représentations du même nombre dans tous les positional systems possibles vivent exactement au même point sur la droite numérique. Vous pouvez bien imprimer dans différentes bases:

int num = 15; 
printf("%d", num); /* prints 15 */ 
printf("0x%x", num); /* prints 0xf */ 
printf("0%o", num); /* prints 017 (octal) */ 

num = 0xf; 
printf("%d", num); /* prints 15 */ 
printf("0x%x", num); /* prints 0xf */ 
printf("0%o", num); /* prints 017 (octal) */ 

num = 017; 
printf("%d", num); /* prints 15 */ 
printf("0x%x", num); /* prints 0xf */ 
printf("0%o", num); /* prints 017 (octal) */ 
5

types entiers dans la langue C ne vraiment pas ont une base. Quand vous dites:

int a = 100; 
int b = 0x64; 

... à la fois a et b ont la même valeur. Cela n'a aucun sens de parler de conversion a en hexadécimal (ou b en décimal).

0

Um,

int i = 100; 
char c = i; // c now has the value 0x64 (aka decimal 100) 

il n'y a vraiment rien d'autre que vous avez à faire, sauf être sûr que i n'est pas plus grand que 255.

bases numériques ne viennent vraiment en jeu lors de l'impression ou sinon afficher un nombre à un humain. Dans la mesure où un nombre en mémoire va, 100 est 0x64 est 0144 est 1100100. Ils sont tous la même valeur, de sorte qu'ils sont tous représentés par le même ensemble de bits.

C'est comme si vous demandiez comment afficher la couleur verte en espagnol. Le vert est le vert est vert, peu importe la langue que vous utilisez. C'est seulement quand vous essayez de trouver un moyen de l'écrire en tant que mot que vous devez considérer quelle langue vous allez utiliser. C'est donc avec les chiffres et décider quelle base vous allez utiliser.

0

100 en décimal est 0x64 en hexadécimal, aucune 'conversion' n'est nécessaire. La base d'un nombre entier est juste une question d'interprétation.