Fonction C++ de conversion en héxadécimal
Résolu/Fermé
bouazza
Marcel_fait_du_tricot - 17 févr. 2016 à 14:33
- Messages postés
- 188
- Date d'inscription
- vendredi 9 décembre 2005
- Statut
- Membre
- Dernière intervention
- 7 avril 2006
Marcel_fait_du_tricot - 17 févr. 2016 à 14:33
A voir également:
- C++ hexadecimal
- Convertir de decimal a hexadecimal en c++ - Meilleures réponses
- Hexadecimal c++ - Meilleures réponses
- Hexadecimal - Articles
- A l'aide du tableau trouvez le mot dont le code ascii en hexadécimal est le suivant ✓ - Forum - Programmation
- Code ascii en hexadécimal - Guide
- Comment convertir un code ascii en hexa - Forum - Programmation
- Editeur hexadecimal - Télécharger
15 réponses
Aghaster
22 janv. 2006 à 06:14
- Messages postés
- 26
- Date d'inscription
- dimanche 22 janvier 2006
- Statut
- Membre
- Dernière intervention
- 27 janvier 2007
22 janv. 2006 à 06:14
Inutile de faire la conversion à la main! Vous vous donnez bien trop de mal pour rien. Premier commentaire : C'est du C++! N'utilisez pas les vieilles fonctions C. #include <stdio.h> devrait être #include <cstdio>. Si une librairie standard a une extension .h, c'est que c'est une vieille libraire C. Les librairies standard C++ n'ont tout simplement pas d'extension. 2) Pourquoi utiliser printf? encore là c'est pour le C. Oui ça marche en C++ mais c'est une mauvaise habitude. std::cout existe pour le C++. En plus, la librairie standard inclu déjà quelque chose qui va grandement te simplifier la vie... on appelle ça std::hex.
#include <iostream>
int main()
{
std::cout << "Entre un nombre: ";
int nb;
std::cin >> nb;
std::cout << "Voici ce nombre en hexadecimal: "
<< std::hex << nb << std::endl;
}
C'est aussi simple que ça, tu n'as qu'a include std::hex dans un cout, et les nombres vont être affichés sous représentation hexadécimale. Beaucoup BEAUCOUP plus rapide qu'une conversion manuele. Quoi faire si tu assigner une valeur hexadécimale à une variable dans ton programme?
int x = 0xFF;
Tu n'as qu'à ajouter 0x avant le nombre, c'est tout. Si tu veux que je t'écrive une fonction pour convertir soi-meme de décimal à hexadécimal dit le moi, jvais ten écrire une assez rapide.
-Aghaster
www.planetcpp.info
#include <iostream>
int main()
{
std::cout << "Entre un nombre: ";
int nb;
std::cin >> nb;
std::cout << "Voici ce nombre en hexadecimal: "
<< std::hex << nb << std::endl;
}
C'est aussi simple que ça, tu n'as qu'a include std::hex dans un cout, et les nombres vont être affichés sous représentation hexadécimale. Beaucoup BEAUCOUP plus rapide qu'une conversion manuele. Quoi faire si tu assigner une valeur hexadécimale à une variable dans ton programme?
int x = 0xFF;
Tu n'as qu'à ajouter 0x avant le nombre, c'est tout. Si tu veux que je t'écrive une fonction pour convertir soi-meme de décimal à hexadécimal dit le moi, jvais ten écrire une assez rapide.
-Aghaster
www.planetcpp.info
Aghaster
22 janv. 2006 à 19:28
- Messages postés
- 26
- Date d'inscription
- dimanche 22 janvier 2006
- Statut
- Membre
- Dernière intervention
- 27 janvier 2007
22 janv. 2006 à 19:28
Ah, ben alors pas de problème. J't'ai écrit un ptit prog qui te converti une std::string de décimale à hexadécimale. Améliore-le comme tu veux (j'ai pas tenu compte de si on entrait des lettres ou des caractères autre que des nombres). C'est relativement rapide, alors le voici:
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
int main()
{
std::cout << "Entre un nombre: ";
std::string nb;
std::cin >> nb;
// On converti de std::string à integer
int temp = 0;
int len = nb.length();
for(int i = 0; i < len; i++)
{
temp += (nb[i] - 48) * pow((float)10,len-i-1);
}
// Et on reconverti en std::string sous forme hexadécimale!
std::stringstream ss;
ss << std::hex << temp;
ss >> nb;
std::cout << nb << std::endl; // Voilà, c'est fait.
}
Amuse-toi bien! Hésites pas si t'as d'autres questions.
-Aghaster
www.planetcpp.info
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
int main()
{
std::cout << "Entre un nombre: ";
std::string nb;
std::cin >> nb;
// On converti de std::string à integer
int temp = 0;
int len = nb.length();
for(int i = 0; i < len; i++)
{
temp += (nb[i] - 48) * pow((float)10,len-i-1);
}
// Et on reconverti en std::string sous forme hexadécimale!
std::stringstream ss;
ss << std::hex << temp;
ss >> nb;
std::cout << nb << std::endl; // Voilà, c'est fait.
}
Amuse-toi bien! Hésites pas si t'as d'autres questions.
-Aghaster
www.planetcpp.info
kilian
21 janv. 2006 à 19:22
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
21 janv. 2006 à 19:22
Salut,
Tu peux te faire un truc comme ça:
Et s'il faut convertir 'a5' en 0xa5
Il faut t'arranger pour faire:
hex= (convert('a') << 4) + convert('5');
Car pour le a, qui correspond à 10 *(16^1), tu peux aussi faire 10 << 4
Tu peux te faire un truc comme ça:
int convert(char caractere) { char bidule[]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a','b','c','d','e','f'}; int i; for (i=0;i<sizeof(bidule);i++) { if (caractere == bidule[i]){ return i; } } //On a pas trouvé de correspondance return -1; }
Et s'il faut convertir 'a5' en 0xa5
Il faut t'arranger pour faire:
hex= (convert('a') << 4) + convert('5');
Car pour le a, qui correspond à 10 *(16^1), tu peux aussi faire 10 << 4
nesssta
26 janv. 2007 à 21:51
- Messages postés
- 2
- Date d'inscription
- vendredi 26 janvier 2007
- Statut
- Membre
- Dernière intervention
- 27 janvier 2007
26 janv. 2007 à 21:51
ce programme ne marche pas à tous les coups:
d'abord la taille de la chaine en hexa ainsi convertie est limitée
de plus ça ne permet pas de convertir une chaine contenant des espaces, dès que l'algorithme capte un espace il s'arrete et le reste de la chaine n'est pas converti.
Comment faire pour résoudre ce problème. Aidez-moi SVP. Si vous avez une quelconque idée la dessus n'hésitez pas à me répondre, je vous seraai très reconnaissante.
Merci d'avance.
d'abord la taille de la chaine en hexa ainsi convertie est limitée
de plus ça ne permet pas de convertir une chaine contenant des espaces, dès que l'algorithme capte un espace il s'arrete et le reste de la chaine n'est pas converti.
Comment faire pour résoudre ce problème. Aidez-moi SVP. Si vous avez une quelconque idée la dessus n'hésitez pas à me répondre, je vous seraai très reconnaissante.
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Juste une présition : les cout et autre flux sont ce kil ya de plus lent.... si tu veut qqhc de rapide utilise les sprintf()
Salam,
Je pense que le code ci-dessous peut vous aider:
#include<stdio.h>
void main()
{
char ch[33];
int i;
printf("\nDecimale\tHexadecimale\n----------------------------");
for(i=7;i<20;i++)
{
sprintf(ch,"%x",i);
printf("\n%d\t :\t%s",i,ch);
}
}
Allah mo3ine
Je pense que le code ci-dessous peut vous aider:
#include<stdio.h>
void main()
{
char ch[33];
int i;
printf("\nDecimale\tHexadecimale\n----------------------------");
for(i=7;i<20;i++)
{
sprintf(ch,"%x",i);
printf("\n%d\t :\t%s",i,ch);
}
}
Allah mo3ine
bouazza
21 janv. 2006 à 19:09
- Messages postés
- 188
- Date d'inscription
- vendredi 9 décembre 2005
- Statut
- Membre
- Dernière intervention
- 7 avril 2006
21 janv. 2006 à 19:09
Merci , mais je voulait pas afficher le resultat dans l'écran mais le stocker dans une variable !
lami20j
21 janv. 2006 à 19:21
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
21 janv. 2006 à 19:21
Salut,
C'est exactement ce que fait sprintf.
sprintf - ecrit un texte formaté dans une chaîne à la place d'écran.
C'est exactement ce que fait sprintf.
sprintf - ecrit un texte formaté dans une chaîne à la place d'écran.
sprintf(Var,"Resultat =%X",i);Le résultat est stocké dans la variable Var
sprintf(ch,"%x",i);donc hamzafes a stocké le résultat dans la variable ch
kilian
21 janv. 2006 à 19:27
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
21 janv. 2006 à 19:27
Oui mais il veux convertir "1a' en 0x1a
C'est le contraire que fait sprintf()
C'est le contraire que fait sprintf()
bouazza
21 janv. 2006 à 19:25
- Messages postés
- 188
- Date d'inscription
- vendredi 9 décembre 2005
- Statut
- Membre
- Dernière intervention
- 7 avril 2006
21 janv. 2006 à 19:25
Merci pour vos réponses , je vais utiliser sprintf .
bouazza
22 janv. 2006 à 11:21
- Messages postés
- 188
- Date d'inscription
- vendredi 9 décembre 2005
- Statut
- Membre
- Dernière intervention
- 7 avril 2006
22 janv. 2006 à 11:21
merci Aghaster , j'avais oublié que je programmais en C++ :P .
bouazza
22 janv. 2006 à 11:27
- Messages postés
- 188
- Date d'inscription
- vendredi 9 décembre 2005
- Statut
- Membre
- Dernière intervention
- 7 avril 2006
22 janv. 2006 à 11:27
Mais y a un probleme std::hex ne convertit qu'une variable int et pas un string , ce que je voulait c'est convertir un std::string !
bouazza
23 janv. 2006 à 10:24
- Messages postés
- 188
- Date d'inscription
- vendredi 9 décembre 2005
- Statut
- Membre
- Dernière intervention
- 7 avril 2006
23 janv. 2006 à 10:24
Merci .
bouazza
25 févr. 2006 à 14:40
- Messages postés
- 188
- Date d'inscription
- vendredi 9 décembre 2005
- Statut
- Membre
- Dernière intervention
- 7 avril 2006
25 févr. 2006 à 14:40
Voici la fonction que j'utilise maintenant :
et ça fonctionne nickel !!! Merci pour vos réponses
std::string string_hex(std::string buffer){ // converte un string en un string héxadécimal std::ostringstream oss; //initialise un string stream qui stock la sortie de std::hex for (std::string::const_iterator i = buffer.begin(); i != buffer.end(); ++i) //fait une boucle caractére par caractére { oss << std::hex << static_cast<int>(*i); //stock la sortie de std::hex dans oss } return(oss.str()); }
et ça fonctionne nickel !!! Merci pour vos réponses
slt a tou je cherche 1 algo qui fais la conversation de binaire vers les autre base au le contraire "stp j ve 1 algo ki ç écrit en pascal " é merci a la avonce
A priori personne ne propose la solution simple sans algo(..) qui permetrait d'afficher un int (ex : 486) en binaire(486d = 111100110b) (et pas en hexa ça c'est facile...) .
Je pensais trouver une methode rapide qui évite de se taper une ou des conversion intermèdaire ou des boucles, un passage en hexa ou lire bit à bit un entier et de la convertir en char et concatener au fur et à mesure ... pfff.
Il doit bien y avoir une methode C++ qui fait directement ça .. non?
Je pensais trouver une methode rapide qui évite de se taper une ou des conversion intermèdaire ou des boucles, un passage en hexa ou lire bit à bit un entier et de la convertir en char et concatener au fur et à mesure ... pfff.
Il doit bien y avoir une methode C++ qui fait directement ça .. non?
22 janv. 2006 à 10:51
lami20j
5 nov. 2007 à 03:24