convertir un int en hexa

convertir un int en hexa - C - Programmation

Marsh Posté le 02-03-2012 à 19:37:32    

Salut à tous,
 
Je suis en train de coder une appli en c pour dialoguer avec un pic part le port série. Je voudrait que l'utilisateur rentre un nombre, par exemple 100 et que le programme le convertisse en hexa et l'envoie sur le port série. J'arrive bien à envoyer des données sur le port série mais j'ai un autre problème. Y a t'il une fonction pour convertir mon nombre 100 par exemple en hexa qui serait ici 64? En gros j'ai une variable nombre=100; et je voudrait avoir avec une fonction nombre_hexa=0x64; automatiquement. Je connais %x pour les printf mais comment le remettre dans une variable int?
 
Merci de votre aide.

Reply

Marsh Posté le 02-03-2012 à 19:37:32   

Reply

Marsh Posté le 02-03-2012 à 19:51:39    

Convertir un nombre décimal en hexadécimal est relativement facile, ça ne devrait pas être un problème.
 
www.google.fr/#hl=fr&sclient=psy-a [...] exadécimal
 
Par contre si tu veux stocker un nombre en hexadécimal le mieux est un char *, il serait difficile de stocker les lettres ABCDEF de la base hexa dans un int.
 
Tu pourras être aussi intéressé par la fonction sprintf:
 
http://www.cplusplus.com/reference [...] o/sprintf/


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 02-03-2012 à 19:55:36    

Citation :

Je connais %x pour les printf mais comment le remettre dans une variable int?

Mais il est déjà dans la variable int: 100 en décimal et 0x64 en hexa ne sont toutes deux que des représentations de la même valeur de ton int, qui est en fait stockée en binaire.
Tu as pas compris la nuance entre la valeur d'un nombre (un int) et sa représentation au moyen d'une suite de symboles (une chaîne de caractères)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-03-2012 à 20:53:18    

gilou a écrit :

Citation :

Je connais %x pour les printf mais comment le remettre dans une variable int?

Mais il est déjà dans la variable int: 100 en décimal et 0x64 en hexa ne sont toutes deux que des représentations de la même valeur de ton int, qui est en fait stockée en binaire.
Tu as pas compris la nuance entre la valeur d'un nombre (un int) et sa représentation au moyen d'une suite de symboles (une chaîne de caractères)
A+,


 
Oui mais quand je vais envoyer mes trames de la forme int var =0xFE; sur le port série il va m'envoyer ça en hexa alors que si j'envoie ma variable int var2=100; il va me l'envoyer en ASCII donc 0x313030 =! 0x64, ou je me plante?
 
merci

Reply

Marsh Posté le 02-03-2012 à 21:29:17    

Non non et non. Tu te plantes.
Dans les deux cas, il envoie du binaire.
Et si tu fais int var = 0x64; ou bien int var = 100; il enverra la même chose, puisque dans les deux cas la variable var contient la même valeur binaire 1100100 et que c'est ce binaire qui part sur ton port série.
Le port série, il connait que le binaire. Si ton binaire est celui de la valeur d'un int, c'est cette valeur qui sera envoyée.
 
A+,

Message cité 1 fois
Message édité par gilou le 02-03-2012 à 21:30:48

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-03-2012 à 22:02:03    

gilou a écrit :

Non non et non. Tu te plantes.
Dans les deux cas, il envoie du binaire.
Et si tu fais int var = 0x64; ou bien int var = 100; il enverra la même chose, puisque dans les deux cas la variable var contient la même valeur binaire 1100100 et que c'est ce binaire qui part sur ton port série.
Le port série, il connait que le binaire. Si ton binaire est celui de la valeur d'un int, c'est cette valeur qui sera envoyée.
 
A+,


Ok je viens de comprendre.
Si je fais :
 
char var = "100"; => en hexa il va envoyer ça : 0x313030
int var = 100; => en hexa il va envoyer ça : 0x64
 
Là je pense pas me planter.
 
Merci  :jap:

Reply

Marsh Posté le 02-03-2012 à 22:49:35    

char *var = "100"; => en hexa il va envoyer ça : 0x31 0x30 0x30 0x00 (chaîne terminée par 0 en C)
int var = 100; => en hexa il va envoyer ça : 0x64 (avec éventuellement des 0x00 devant selon le nb de bits (16, 32, 64) utilisés pour représenter un int dans ton système et/ou la taille du registre associé à ton port)
Oui.
A+,


Message édité par gilou le 03-03-2012 à 09:24:05

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed