IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Conversion flux binaire -> ascii -> hexa


Sujet :

C++

  1. #1
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut Conversion flux binaire -> ascii -> hexa
    Bonjour,

    N'�tant franchement pas dou� en c++, je vous expose mon probl�me :

    J'ai un vector dans lequel j'ai un flux pdf (c'est donc binaire).
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    	std::vector<unsigned char> vectorResult;
    - Il faudrait que je puisse convertir chaque element en son code ascii en bouclant sur chaque element du vecteur tant que
    - Je me retrouverai ainsi avec un tableau d'entier. Ce que je veux faire ensuite est de convertir chacun de ces entiers en son code hexad�cimal (sur 2 chiffres).

    - Finalement, il faudrait concat�ner chaque code hexad�cimal pour faire un std::string.

    Je vous remercie de votre aide.

  2. #2
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut
    J'explique quand m�me le pourquoi du comment, je r�cup�re un pdf dans mon vector. Si je le transforme directement en std::string, �tant donn� que ce n'est pas du texte tout con, cela coince au niveau du caract�re NUL qui est consid�r� comme une fin de fichier.

    C'est pourquoi il faudrait que je proc�de a toute une s�rie de conversions (c'est le moyen le plus simple que j'ai trouv� pour faire passer mon flux entier et le recup�rer ENTIER apr�s dans mon php)

  3. #3
    Membre �m�rite
    Avatar de Spout
    Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    904
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 904
    Par d�faut
    Si j'ai bien compris, du veux d�couper le binaire en mots de 8bits, puis mettre la repr�sentation hexa de chaque mot � la suite dans un std::string ?

  4. #4
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut
    voila c'est ca

  5. #5
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut
    Mon probl�me se situe au niveau de la conversion en hexa en fait

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
            unsigned int * TableauAscii = new unsigned int[bufsize];
    	unsigned char * TableauHexa = new unsigned char[bufsize];
     
    	int i=0;
    	while (i<vectorResult.size())
    	{
    		// On recupère le code ascii de chaque element du vecteur
    		TableauAscii[i] = vectorResult[i];
     
    		// On fait ici la conversion en hexadécimal (sur 2 chiffres)
    		sprintf(&TableauHexa[i], "%X", TableauAscii[i]);
     
    		// on récupère le résultat en hexa, on concatène le tout pour faire un string
    		// je sais pas trop comment faire pour l'instant
    		i++;
    	}
    Si quelqu'un pouvait m'aider sur ce coup ce serait sympa

    Merci

  6. #6
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    salut,
    tu peut faire un truc comme cela
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    template <typename T>
    struct ConvertToHex
    {
    ConvertToHex(std::ostream & s,int NbC)
    :m_s(s),m_nbC(NbC)
            {
            //initialise le flux en hexa,majuscule et ecriture a gauche
            m_s<<std::hex<<std::uppercase <<std::right;
            }
     
    void operator()(const T & t)
            {
            //envoie t dans le flux sur 2 caractère
            m_s<<std::setw(m_nbC)<< static_cast<unsigned int>(t);
            }
     
     
    std::ostream & m_s;
    int m_nbC;
    };
     
    int main(int argc, char** argv)
    {
     
    std::vector<unsigned char> vectorResult;
    std::string resultat;
    std::stringstream iosout;
    //init du vecteur
    vectorResult.push_back(1);
    vectorResult.push_back(10);
    vectorResult.push_back(0xff);
     
     
    //caractère de remplissage
    iosout.fill('0');
    //convertion par le foncteur
    std::for_each(vectorResult.begin(),vectorResult.end(),  ConvertToHex<unsigned char>(iosout,2));
     
     
    //récuperation du résultat dans une string;
    iosout>>test;
    std::cout<<test<<std::endl;
    }

  7. #7
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut
    Ben on dirait que ca marche mongaulois c super. Par contre, je n'ai pas tr�s bien compris les 3 push_back d'affil�e

  8. #8
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Citation Envoy� par identifiant_bidon Voir le message
    Ben on dirait que ca marche mongaulois c super. Par contre, je n'ai pas tr�s bien compris les 3 push_back d'affil�e
    C'est juste pour mettre quelque chose dans le vector.
    Il y as une m�thode plus rapide mais il faut un s�parateur entre chaque valeur :

    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    std::stringstream iosout;
    iosout<<std::hex;
    //ici le separateur est un espace
    std::copy(vectorResult.begin(),vectorResult.end(),  std::ostream_iterator<int>(iosout, " "));
     
    std::string test;
    iosout>>test;

  9. #9
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut
    Ok super. Je te remercie ca marche tr�s bien.

    Maintenant autre question, dans le code d'hier

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    std::string CObjetMetier::BlobToBlobVector(std::string result, const OBlob & m_blob)
    {
    	std::vector<unsigned char> vectorResult;
    	short status= OLOB_NEED_DATA;
    	int PositionFichier = 0;
    	unsigned long size;
    	unsigned long optchunk;
    	unsigned int bufsize;
     
    	size = m_blob.GetSize();
     
    	vectorResult.resize(size);//taille le vecteur à la taille maximum du blob
     
    	// calcul de la taille du buffertemporaire optimale
    	optchunk = m_blob.GetOptimumChunkSize();
    	bufsize = ((int)(32768/optchunk)) *optchunk;
     
    	bufsize = size;
    	unsigned char *BufferTmp = new unsigned char[bufsize];
     
    	unsigned long NbLue=0;
    	while(status == OLOB_NEED_DATA)	 
    	{
    	   NbLue = m_blob.Read(&status, BufferTmp,  bufsize );
     
             //blindage, au cas ou l'on dépasse la grandeur du vector
              if (PositionFichier + NbLue > vectorResult.size())
                {
    				vectorResult.resize(PositionFichier + NbLue);
                }
           for(int i=0 ; i < NbLue ; ++i) vectorResult[PositionFichier + i] = BufferTmp[i];
           PositionFichier += NbLue;
    	}
    Ca plante � cette ligne

    je ne sais pas encore pourquoi. Ca marche bien lorsque mon recordset ne me renvoie qu'un r�sultat mais s'il y en a plusieurs ca plante la a l'execution. J'essaie de voir ce qui cloche. Si jamais tu as une id�e ...

  10. #10
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Je croyait que tu lisait tout le blob d'un coup??
    Sinon j en sais pas. Test si il est null ou ouvert
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    if (result.IsNull()) std::cout<<"Le BLOB est NULL"<<std::endl;
    if (result.IsOpen() ) std::cout<<"Le BLOB est ouvert"<<std::endl;

  11. #11
    Membre �m�rite
    Avatar de Spout
    Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    904
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 904
    Par d�faut
    Ton m_Blob a l'air d'avoir une valeur incorrecte je dirais.

  12. #12
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut
    En effet je lis bien tout le blob d'un coup. La ou �a coince (a la ligne que j'ai donn�e plus haut), c'est quand je vais lire plusieurs blob les uns apr�s les autres. Lorsque la requete me renvoie qu'un resultat, je ne vais lire qu'un blob et l� c'est la f�te.

    maintenant si la requete me renvoie plusieurs resultats, je dois lire les blobs les uns derri�re les autres et la ca coince. (oui dans ma base de donn�es j'ai une colonne r�serv�e aux blob). Dans ce cas la, j'ai m_blob isnull

  13. #13
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Citation Envoy� par identifiant_bidon Voir le message
    En effet je lis bien tout le blob d'un coup. La ou �a coince (a la ligne que j'ai donn�e plus haut), c'est quand je vais lire plusieurs blob les uns apr�s les autres. Lorsque la requete me renvoie qu'un resultat, je ne vais lire qu'un blob et l� c'est la f�te.

    maintenant si la requete me renvoie plusieurs resultats, je dois lire les blobs les uns derri�re les autres et la ca coince. (oui dans ma base de donn�es j'ai une colonne r�serv�e aux blob). Dans ce cas la, j'ai m_blob isnull
    Tu as donc un probl�me de r�cuperation du blob, mais bon tu t'en dout�

  14. #14
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    747
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par d�faut
    Bravo

    Bon je vais contourner le probl�me dans mon php en bouclant et en appelant la fonction plusieurs fois, puisque cela fonctionne quand la requete renvoit un element mais cela ne marche plus quand la requete en renvoie plusieurs

    Allez hop, j'passe en r�solu. Merci bien

  15. #15
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par identifiant_bidon Voir le message
    Ben on dirait que ca marche mongaulois c super. Par contre, je n'ai pas tr�s bien compris les 3 push_back d'affil�e
    N'emp�che que par rapport � ce que tu veux faire (autres posts), ce n'est pas g�nial, puisque tu multiplies inutilement par 3 la taille de ton fichier...
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  16. #16
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Citation Envoy� par JolyLoic Voir le message
    N'emp�che que par rapport � ce que tu veux faire (autres posts), ce n'est pas g�nial, puisque tu multiplies inutilement par 3 la taille de ton fichier...
    +1

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Conversion cha�nes binaires en ASCII sans LabVIEW
    Par menas dans le forum LabVIEW
    R�ponses: 0
    Dernier message: 20/09/2012, 11h08
  2. [LabView 8.2] Conversion cha�ne ascii en Hexa
    Par Lovechoco dans le forum LabVIEW
    R�ponses: 0
    Dernier message: 29/04/2009, 10h00
  3. Conversion ASCII vers Hexa
    Par PtiBruno dans le forum C
    R�ponses: 3
    Dernier message: 25/02/2008, 09h40
  4. conversion ascii to hexa
    Par Invit�(e) dans le forum C
    R�ponses: 16
    Dernier message: 30/03/2007, 10h11
  5. conversion : (Ascii en hexa) => nombre
    Par tut dans le forum C++
    R�ponses: 3
    Dernier message: 21/04/2004, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo