Pages : 1
#1 Le 18/09/2013, à 13:56
- G.I.Bdeking
convertir héxa en décimal (C++)
Bonjour à tous! J'ais un problème que je n'arrive pas à résoudre après 2 heures 34 de recherches intensives (sans rire). En fait ce que je cherchait me semblait simple (convertir un nombre héxadécimal (contenu dans un string) en nombre décimal (contenu dans un unsigned long)) et pour l'instant mes recherches ont aboutit à ceci:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
string hexa("f12");
std::stringstream sstream;
sstream << std::hex << hexa;
std::string result = sstream.str();
cout<<result<<endl;
//getchar();
return 0;
}
Mais g++ me brime:
programmes/C++/test/test/main.cpp|13|erreur: aggregate ‘std::stringstream sstream’ has incomplete type and cannot be defined| [compilateur sadique]et bim! dans ta schtroumpf![/compilateur sadique]
Bon, j'espère que vous saurez m'aider!
Dernière modification par G.I.Bdeking (Le 18/09/2013, à 13:57)
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#2 Le 18/09/2013, à 14:35
- claudius01
Re : convertir héxa en décimal (C++)
Hors ligne
#3 Le 18/09/2013, à 14:44
- grim7reaper
Re : convertir héxa en décimal (C++)
@claudius01 : le monsieur fait du C++, on va éviter de sortir des fonctions C quand on peut l’éviter…
D’autant plus qu‘il veut un unsigned long donc c’est plutôt strtoul et non pas strtol.
Mais bon, en C++ on préfère faire comme ça.
Édit : Oups, j‘ai lu trop vite.
Tu pointais std::stol qui est bel et bien du C++ (j’avais lu strtol). Toutes mes excuses.
Bon, cela dit 50% de ma remarque reste valide. Il faut utiliser std::stoul pour avoir un unsigned long.
@G.I.Bdeking : chez moi ça fonctionne :
#include <iostream>
#include <sstream>
int main()
{
std::istringstream iss("f12");
unsigned long n;
iss >> std::hex >> n;
std::cout << n << '\n';
return 0;
}
Oublie le using namespace std;, c’est une mauvaise pratique (le sujet a déjà été abordé plusieurs fois sur ce forum).
Bon, pour résumer :
C++11 => utilise std::stoul
C++ plus ancien => utilise ma méthode.
Dernière modification par grim7reaper (Le 18/09/2013, à 14:49)
Hors ligne
#4 Le 23/09/2013, à 17:54
- G.I.Bdeking
Re : convertir héxa en décimal (C++)
Merci ça compile sans erreurs maintenant!
Par contre je ne vois pas pourquoi me priver de faire un using namespace std!
En fait, si je fait un using namespace pour la SL et pas pour d'autres bibliothèques je ne vois pas d’inconvénients surtout que généralement je sais quand j'utilise la SL.
Je trouve la solution de claudius très intéressante aussi, ce n'est pas parce-que je programme en C++ que je ne peu pas utiliser de fonctions en C, pourquoi se priver?
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#5 Le 23/09/2013, à 18:17
- G.I.Bdeking
Re : convertir héxa en décimal (C++)
ah oui, au fait, j'aimerais donner à un pointeur une adresse écrite en hexadécimal dans un fichier pour faire communiquer deux programmes ensemble, comment faire?
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#6 Le 23/09/2013, à 20:54
- grim7reaper
Re : convertir héxa en décimal (C++)
Par contre je ne vois pas pourquoi me priver de faire un using namespace std!
En fait, si je fait un using namespace pour la SL et pas pour d'autres bibliothèques je ne vois pas d’inconvénients surtout que généralement je sais quand j'utilise la SL.
Y’a un bon paquet de noms très commun donc c’est sujet à collisions (collisions qui peuvent passer inaperçu, bonjour le débug…).
Exemple à la con, on pourrait en trouver d’autres : la fonction abs pour avoir la valeur absolue, bah dans ton code tu peux aussi avoir une fonction abs qui renvoie l’abcisse d’un point.
Puis franchement, le préfixe de la bibliothèque standard a été choisi court pour que ça ne soit pas gênant à taper justement.
Au pire, tu fais des using sélectif.
Mais un gros using global de l’espace de nommage de la bibliothèque standard, oui c’est crade.
Je trouve la solution de claudius très intéressante aussi ce n'est pas parce-que je programme en C++ que je ne peu pas utiliser de fonctions en C
La solution de claudius c’est du C++, j’avais mal lu.
ce n'est pas parce-que je programme en C++ que je ne peu pas utiliser de fonctions en C, pourquoi se priver?
La vraie question c’est pourquoi utiliser une fonction C alors que C++ propose une façon simple (surtout depuis C++11) de le faire ?
Quand tu codes en Java ou en Python, tu ne vas pas appeler des fonctions C juste parce que tu peux le faire, non ?
Bah la c’est pareil, le C++ est un langage différent du C. Point.
Après, l’histoire du C++ veut qu’il ait un socle commun avec le C (et encore, certains codes ont un comportement différent si compilé en C ou en C++), mais ça reste des langages distincts.
De plus, le fait que certains cours/prof’/tuto’/livre’ apprennent le C++ comme un C amélioré au lieu d’un langage à part entière (terrible erreur…) n’arrange pas les choses…
ah oui, au fait, j'aimerais donner à un pointeur une adresse écrite en hexadécimal dans un fichier pour faire communiquer deux programmes ensemble, comment faire?
Bah tu écris l’adresse dans un fichier, tu lis la valeur puis tu convertis en hexa et tu affectes la valeur à un pointeur.
Mais bon, c’est pas comme ça que tu feras communiquer deux processus (chaque processus à son espace d’addressage dans les OS modernes).
Si tu veux faire communiquer des processus, regarde du côté des IPC.
Il y a plusieurs mécanismes, lequel utiliser va dépendre de tes besoins.
Dernière modification par grim7reaper (Le 23/09/2013, à 20:56)
Hors ligne
#7 Le 24/09/2013, à 16:52
- G.I.Bdeking
Re : convertir héxa en décimal (C++)
Merci! Je vais ouvrir un autre sujet pour poser deux-trois questions sur les modules linux! Grim, j'éviterais désormais d'utiliser des using namespace et je lirais encore plus la doc C++, promis!
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#8 Le 24/09/2013, à 17:38
- grim7reaper
Re : convertir héxa en décimal (C++)
Merci! Je vais ouvrir un autre sujet pour poser deux-trois questions sur les modules linux! Grim, j'éviterais désormais d'utiliser des using namespace et je lirais encore plus la doc C++, promis!
Les using sont utiles, mais en général pas pour std.
Par exemple, dans un de mes codes j’ai :
using boost::asio::ip::tcp;
Ce qui me permet de taper :
tcp::acceptor acceptor(ios, tcp::endpoint(tcp::v4(), PORT));
au lieu de
boost::asio::ip::tcp::acceptor acceptor(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), PORT));
Mais oui, prend le relfexe de bien consulter la doc’ ça te servira
Le C++ est un langage très riche, et avec les nouvelles normes (C++11, et C++14 pour bientôt) c’est encore plus vrai. Ça serait dommage de passer à côté de ça.
Hors ligne