Bonjour
Je récupère le flux binaire d'un fichier pdf sous forme de blob (%PDF-1.4 ...) dans ma fonction BlobToBlobVector (c'est ce qui est passé en paramètre de la fonction). Je prends un par un les caractères de ce flux pour les transformer en hexa. Je renvoie alors cette chaine héxa dans result qui est un string. Mon problème c'est qu'au lieu d'avoir ceci,
255044462D312E340D0A25C3A4C3BCC3B6C39F0D0A322030206F626A0D0A3C3C202F4C656E6774682033203020520D0A2020.....
j'ai ceci
255044462D312E34 D A25C3A4C3BCC3B6C39F D A322030206F626A D A3C3C202F4C656E677468203320302052 D A2020.....
En gros, cela merde sur 0D 0A (qui est le saut de ligne) mais je ne sais pas comment résoudre le problème.
Voici mon code
Pour Mongaulois qui se poserait la question , le code d'avant était bon. Le hic c'est que c'est beaucoup trop long alors j'essaie de gagner du temps en réduisant au max le nombre de lectures du blob.
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
34
35
36 void ConvertToHex(std::stringstream & s,const unsigned char & t) { //initialise le flux en hexa,majuscule et ecriture a gauche s<<std::hex<<std::uppercase <<std::right; //envoie t dans le flux sur 2 caractère s<<std::setw(2)<< static_cast<unsigned int>(t); } std::string CObjetMetier::BlobToBlobVector(const OBlob & m_blob) { std::vector<unsigned char> vectorResult; short status= OLOB_NEED_DATA; int PositionFichier = 0; unsigned int bufsize; std::string result; std::stringstream iosout; bufsize = m_blob.GetSize(); unsigned char *BufferTmp = new unsigned char[bufsize]; unsigned long NbLue=0; result = ""; NbLue = m_blob.Read(&status, BufferTmp, bufsize ); for (unsigned long i=0; i<NbLue ;i++) { ConvertToHex(iosout,BufferTmp[i]); } result = iosout.str(); return result; }
Merci
Partager