Journal probleme en c++

Posté par  .
Étiquettes : aucune
0
9
avr.
2004
bonjour,

j'utilise les classes commoncpp que je trouve vraiment bien.

dans ces classes, il y en a une qui sert a calculer une somme MD5.

je veux l'utiliser, elle fonctionne bien mais le probleme c'est que je ne peut qu'afficher le resultat.

le prototype est le suivant :

operator<<(std::ostream &os, Digest &ia)

ce qui veut dire que si je fais :

cout << digest;
ça va afficher le resultat (le md5).

mais j'aimerais recuperer la valeur dans une string ou qquel chose d'equivalent.

ya t'il moyen d'intercepter ce qui passe dans cout ?

les classes ne permettent pas d'autre solution pour recuperer la valeur je croit.

merci
ps : http://www.gnu.org/software/commoncpp/(...)
  • # Re: probleme en c++

    Posté par  . Évalué à -1.

    Euh je sais pas trop, t'as essayé sprintf ?
    Car pitetr qu'en forcant par un sprintf(md5,"%s",digest) ca marcherai ?

    - cho7, qui essaie d'aider, mais qui n'a guere de solution... -
  • # Re: probleme en c++

    Posté par  . Évalué à 1.

    je me suis pas servi des << et des >> depuis les tp en école d'ingé, mais y avait pas des cas d'utilisation de << dans autre chose que cout ? par exemple une string, pour concaténer des trucs et des machins...
    j'veux dire: std::ostream, y a pas moyen de s'en servir pour utiliser une chaine de caractère ?
  • # Re: probleme en c++

    Posté par  (site web personnel) . Évalué à 3.

    On peut aussi utiliser strstream
    Ça marche super bien, on peut utiliser

    String s= new String ("1 2 5");
    str << s;

    puis ensuite lire des valeurs dedans, genre avec

    int entier;
    str >> entier;

    Je ne sais pas si c'est ce que tu cherches, mais ça marche assez bien...
    • [^] # Re: probleme en c++

      Posté par  (site web personnel) . Évalué à 2.

      Je crois que ca s'appelle stringstream, tu peut y envoyer un flux, et t'en servir comme une string... Par contre je me souvient plus de ce qu'il faut inclure...
      • [^] # Re: probleme en c++

        Posté par  (site web personnel) . Évalué à 1.

        Je crois que ca s'appelle stringstream
        Tout dépend de la version de g++ que tu utilises...

        En fait les lignes de mon post ci-dessus sont inspirées d'un projet dont voici les
        premières lignes du fichier utilisant strstream:

        /* on utilise ici strstream au lieu de stringstream
        * malgré le fait que ce soit depreciated
        * pour des raisons de compatibilité avec le compilateur g++ version 2.95 disponible au CIE */
        #include

        Si on a un compilateur un tant soit peu moderne, on doit certainement utiliser
        #include <stringstream>
        • [^] # Re: probleme en c++

          Posté par  . Évalué à 1.

          pour mon juste en dessous, j'utilise gcc/g++ 3.3
          • [^] # Re: probleme en c++

            Posté par  . Évalué à 1.

            Et c'est heureux car si GCC fonctionne en général plutôt bien, il faut encore qu'il fonctionne tout court, et avec le C++ ce n'était pas gagné d'avance. Je me suis battu avec le GCC 3.1 sur Solaris, avec des stringstreams justement, et des segfaults inexpliquées. Une semaine de perdue, finalement un rapport de bug sur le bugzilla du site de GCC, pour apprendre un quart d'heure plus tard que le bug était connu dans la série en question (mais pas soumis dans bugzilla) et corrigé dans une version tardive de la branche 3.2.

            Moralité: Le C++ sous Unix, c'est génial, mais n'hésitez pas à aller chercher la dernière version du compilo !
      • [^] # Re: probleme en c++

        Posté par  . Évalué à 1.

        formidable !!!

        je suis oblige plussoyer tellement vous m'avez rendu service.

        voila comment j'ai fais, au cas ou d'autre serait dans le même cas que moi un jour :

        #include < sstream >

        string generer_md5(string fichier)
        {
        stringstream md5;

        //
        // [...] ici : traitement sur un fichier pour generer le md5
        //

        md5 << digest;
        return md5.str();
        }

        merci
        • [^] # Re: probleme en c++

          Posté par  . Évalué à 1.

          pour un cas comme cela, le bouquin de stroustrup est un must

          tu peux faire des ostringstream et des istringstream, mais je n'ai pas trop compris l'utilité par rapport à un stringstream ? quelqu'un m'explique ?
          • [^] # Re: probleme en c++

            Posté par  . Évalué à 1.

            On trouve un bon aperçu des streams ici:
            http://www.cplusplus.com/ref/iostream/index.html(...)

            Basiquement, stringstream = istringstream + ostringstream

            En C++, ostringstream est à ostream ce que, en C, sprintf est à fprintf. Symétriquement, istringstream et istream correspondent respectivement à sscanf et fscanf.

            En C, on utilise jamais l'un avec l'autre. En C++, au contraire c'est très utilisé pour formatter des valeurs ou les convertir. Toujours est-il que tout les streams travaillent sur un buffer accessible par rdbuf ou str. C'est surtout ce buffer qu'il faudrait exploiter plus souvent.

            Sinon, pour les cours C++: En ce qui me concerne, il y a belle lurette que je n'ai plus qu'une seule référence:

            http://casteyde.christian.free.fr(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.