Bonjour.Existe-t-il des fonctions simples pour convertir un int et un cstring en hexa?Si non, comment faut il faire?Et comment peut on alors spécifier la longueur de cette valeur hexa? merci
Version imprimable
Bonjour.Existe-t-il des fonctions simples pour convertir un int et un cstring en hexa?Si non, comment faut il faire?Et comment peut on alors spécifier la longueur de cette valeur hexa? merci
http://c.developpez.com/faq/cpp/?pag...to_stream_hexa
Si tu bosses avec des CString tu as aussi certainement une solution spécifique dans la FAQ VC++.
Merci! Mais comment je fais pour définir la taille de ma valeur hexa?
Je fais :
std::ostringstream oss;
oss << std::hex << nom__variable;
std::string Hex = oss.str();
et ensuite je dois faire un fprintf(fichier,"%i",nom__variable");
mais quand je choisit par exemple 100 pour ma variable ca me donne -858993664 au lieu de 64..A quel endroit est mn erreur?
Code:
1
2
3 std::ostringstream oss; oss << std::hex << nom__variable; std::string Hex = oss.str();
Quel est le rapport entre ces deux bouts de code ? La représentation hexadécimale se trouve dans ta chaîne Hex, c'est elle qu'il faut utiliser si tu veux l'afficher.Code:fprintf(fichier,"%i",nom__variable");
Ensuite, fprintf c'est du C, et je ne connais pas la signification du formatteur %i donc je ne peux pas te dire si c'est ton appel à fprintf qui est erroné ou si c'est autre chose.
Désolé...
En fait j ai mis
std::ostringstream oss;
oss << std::hex << nom__variable;
std::string Hex = oss.str();
FILE*fichier;
fichier=fopen("texte.txt","wt");
frprintf(fichier,"%d",Hex);
fclose(fichier);
Hex n'est pas un entier mais une string donc %d ne convient pas ici.Citation:
frprintf(fichier,"%d",Hex);
Essaie ceci :
Code:fprintf(fichier,"%s",Hex.c_str());
Hex est une chaîne, tu ne peux pas l'afficher avec un %d.
Mais utilise donc du vrai C++ :Code:fprintf(fichier, "%s", Hex.c_str());
Code:
1
2 std::ofstream File("toto.txt"); File << std::hex << 100;
En C++ :
EDIT : Grilled par Laurent ! :aie:Code:
1
2 std::ofstream fichier("texte.txt"); fichier << Hex;
Merci beaucoup!Désolé pour toutes ces questions, mais je débute et en plus je dois réaliser ce prograzmme dans le cadre d'un stage...
Juste une dernière question:comment je fait pour pouvoir convertir plusieurs autres variables? Parce que ca me met "oss redefinition" si je tente de le refaire pour un autre variable..
Utilise le même flux, que tu effaces entre chaque conversion avec oss.str(""). Ou écris directement toutes tes variables si elles doivent être à la suite :
Code:
1
2 std::ostringstream oss; oss << std::hex << x1 << x2 << x3;
je m'excuse d'avance, mais j arrive pas à comprendre comment modifier le code pour avoir mes valeurs hexa toujours écrites sur 2 octets...
Je t'invite à retourner voir la FAQ dont le lien est donné plus haut si tu ne sais plus ce que sont setw ou setfill.Code:
1
2
3
4 std::ostringstream oss; oss << std::hex << std::setw(2) << std::setfill(0) << 10; // Sortie : 0A
Je fais :
oss<<std::hex<<std::setw(2)<<std::setfill(0)<<nom__variable;
mais il me met
binary '<<':no operator defined which takes a right-hand operand of typr 'struct std::_Filljob<int>'...
tu as pensé à?Code:#include <iomanip>
Tu peux poster toute l'erreur?
Et nom__variable est de quel type?
Et bien l erreur c'est ce que j ai mis, avec avant : error C2679, et après: (or there is no acceptable conversion).
La variable c'est un int
Oui j'ai mis le include
Dans ce cas, tu peux essayer en mettant un using namespace std; dans ton code (ou ta fonction) au lieu de spécifier directement le namespace: Peut-être que ta version de Visual ne trouve pas l'opérateur redéfini pour cette raison...
PS: On est d'accord, ce que tu écris dans le fichier, c'est une chaîne comprenant des caractères '0' à 'F', hein...