# C++ std:string en hexadécimal ?

**URL:** <https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 11:15 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423 "2016-02-21T11:15:52Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:15 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/1 "2016-02-21T11:15:52Z")

</div>

Hello

tout est dans le titre:

le problème a la base ,c’est les nom de fichier, vu qu’on peux y mettre casiment tout et n’importe quoi… je vai tout convertir en format hexa, sa devrai alors plus poser de problème. seulment voila on dirait que c’est faux …  
voila un exemple:

```auto
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
#include <exception>
#include <iomanip>
using namespace std;

std::string toHex(const std::string& instr)
{
using namespace std;
ostringstream oss;
oss << hex << setw(2) << setfill('0');
for(string::const_iterator i = instr.begin(); i != instr.end(); ++i)
{
if(i != instr.begin())
{
oss << ":";
}
//oss << "0x" << static_cast<unsigned short>(*i);
oss << "" << static_cast<unsigned short>(*i);
}
return oss.str();
}

int main()
{
/*
std::stringstream ss;
ss << "your id is " << std::hex << varexa;
const std::string s = ss.str();

std::cout<< s << std::endl;*/
std::cout << toHex("Ma�anaDB.pdb (codage non valide)") << std::endl;
return 0;
}
```

j’obtien:

> [@](#):
>
> 004d:61:ffef:ffbf:ffbd:61:6e:61:44:42:2e:70:64:62:20:28:63:6f:64:61:67:65:20:6e:6f:6e:20:76:61:6c:69:64:65:29

je me demande si la sortie est vraiment valable car:

> [@](#):
>
> 004d:61:ffef:ffbf:ffbd

semble erronnée c’est lier aux caractère : �  
si quelqu’un a une idée je suis preneur

Merci d’avance

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 11:15 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/2 "2016-02-21T11:15:59Z")

</div>

> [@panthere](#):
>
> le problème a la base ,c’est les nom de fichier, vu qu’on peux y mettre casiment tout et n’importe quoi… je vai tout convertir en format hexa, sa devrai alors plus poser de problème. seulment voila on dirait que c’est faux …

Je ne comprends pas très bien ton problème (j’ai pas eu le temps aujourd’hui de lire ton code).

Si c’est un problème lié à unicode, tu devrais plutôt te pencher (mais pas trop pour ne pas tomber) sur [std::wstring](http://cpp.developpez.com/faq/cpp/?page=strings#STRINGS_wstring)

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/3 "2016-02-21T11:16:03Z")

</div>

> [@MisterFreez](#):
>
> [quote=«&nbsp;panthere&nbsp;»]le problème a la base ,c’est les nom de fichier, vu qu’on peux y mettre casiment tout et n’importe quoi… je vai tout convertir en format hexa, sa devrai alors plus poser de problème. seulment voila on dirait que c’est faux …

Je ne comprends pas très bien ton problème (j’ai pas eu le temps aujourd’hui de lire ton code).

Si c’est un problème lié à unicode, tu devrais plutôt te pencher (mais pas trop pour ne pas tomber) sur [std::wstring](http://cpp.developpez.com/faq/cpp/?page=strings#STRINGS_wstring)[/quote]  
ah ben je suis quand meme tomber sur ..un bug :

```auto
#include <iostream>
#include <string>
#include <sstream>
#include "cScanDrive.hpp"
#include "cUtility.hpp"
#include <cstring>
#include <exception>
#include <iomanip>
using namespace std;

#include <locale>
#include <vector>

const char conn_str[] = "user='taz' password='postgresbytaz' host='127.0.0.1' dbname='ma_base'";
/*
faire une instance pour l'insertion avec le md5 avec un tread ou un fork
*/

std::string toHex(const std::string& instr)
{
using namespace std;
ostringstream oss;
oss << hex << setw(2) << setfill('0');
for(string::const_iterator i = instr.begin(); i != instr.end(); ++i)
{
if(i != instr.begin())
{
oss << ":";
}
//oss << "0x" << static_cast<unsigned short>(*i);
oss << "" << static_cast<unsigned short>(*i);
}
return oss.str();
}

std::string narrow(const std::wstring& ws)
{
    std::vector<char> buffer(ws.size());
    std::locale loc("english");
    std::use_facet< std::ctype<wchar_t> >(loc).narrow(ws.data(), ws.data() + ws.size(), '?', &buffer[0]);

    return std::string(&buffer[0], buffer.size());
}

std::wstring widen(const std::string& s)
{
    std::vector<wchar_t> buffer(s.size());
    std::locale loc("english");
    std::use_facet< std::ctype<wchar_t> >(loc).widen(s.data(), s.data() + s.size(), &buffer[0]);

    return std::wstring(&buffer[0], buffer.size());
}

int main()
{

std::wcout<< widen("Teste") << std::endl;
}
```

> [@](#):
>
> terminate called after throwing an instance of ‹&nbsp;std::runtime\_error&nbsp;›  
> locale::facet::\_S\_create\_c\_locale name not valid

vala , mai je pense pas que l’unicode va résoudre le problème

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/4 "2016-02-21T11:16:04Z")

</div>

Mon propos consistait à remplacer la méthode de l’hexagone par l’unicode. Même si je ne comprends pas bien ton besoin initial.

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/5 "2016-02-21T11:16:05Z")

</div>

j’ai tenter avec l’unicode ,mai sans succès, ou alors je m’y prend de travert …

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/6 "2016-02-21T11:16:06Z")

</div>

Je ne comprends pas non plus le problème initial, mais vu qu’il est question de noms de fichiers je ne vois pas pourquoi un encodage en hexa changerait quoi que ce soit.  
Panthere, si tu nous expliquais ce que tu veux faire réellement ?

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/7 "2016-02-21T11:16:20Z")

</div>

C’est simple j’ai des nom de fichier par exemple

```auto
/home/monser
```

seulement ce type de donnée on peux y mettre n’importe quoi sauf les /  
j’ai donc un fichier avec un nom a la c\*\*:

```auto
/home/monser/Ma�anaDB.pdb (codage non valide)
```

A stoquer dans une base de donnée ,qui est postgresql.  
et la ça rale:

```auto
terminate called after throwing an instance of 'pqxx::data_exception
what(): ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0xf1616e6
HINT: Cette erreur peut aussi survenir si la séquence d'octets ne correspond pas
au jeu de caractères attendu par le serveur, le jeu étant contrôlé par
« client_encoding ».
```

j’espérerais en codant en hexadécimale que cela résolve le problème mai pour le moment rien ne tien la route.  
voila je pense que j’ai tout dit ..  
donc le but c’est que quelque soit le tpye utf8,héxa,byte etc je puisse y mettre dans la db de manière parfaitement identique🙂

Merci de m’avoir lu ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/8 "2016-02-21T11:16:20Z")

</div>

Et si tu changeais bêtement le type de ta colonne dans PostgreSQL ? Au lieu de stocker une chaîne, stocke un blob. Ça contournera le problème.  
Tu as VRAIMENT besoin que ça soit une chaîne dans ta base ?

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/9 "2016-02-21T11:16:21Z")

</div>

[quote=«&nbsp;syam&nbsp;»]Et si tu changeais bêtement le type de ta colonne dans PostgreSQL ? Au lieu de stocker une chaîne, stocke un blob. Ça contournera le problème.  
Tu as VRAIMENT besoin que ça soit une chaîne dans ta base ?[/quote]

blob n’existe pas dans posgresql … bytea semble si rapprocher mai l’echappement reste indispensable  
[http://docs.postgresql.fr/9.1/datatype-binary.html](http://docs.postgresql.fr/9.1/datatype-binary.html)  
peux importe comment c’est stoquer décimal etc. du moment que je puisse faire des tris avec . je peux convertir avant l’insert et après la sortie d’un select. ![:think:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")

mai là rien n’a fonctionner pour le moment..  
il faut dire que j’ai de la peine a comprendre comme me servir de la lib: ![:017](https://www.debian-fr.org/uploads/default/original/1X/7bbea83f89515ab7c7a738dddb86c4d4f140bd13.gif "reflechit")  
[roguewave.com/portals/0/prod … BBlob.html](http://www.roguewave.com/portals/0/products/sourcepro/docs/11.1/html/sourceproref/classRWDBBlob.html)

si t’a un exemple je suis preneur ![:pray:](https://www.debian-fr.org/uploads/default/original/1X/2abd93f5bdd4258c1e4775cddd8a93bd8304edc5.gif "Pray")

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/10 "2016-02-21T11:16:21Z")

</div>

Tu peux configurer ta base en utf8 : [postgresql.org/docs/current/ … ibyte.html](http://www.postgresql.org/docs/current/static/multibyte.html)  
En suite en utilisant les wstring ça devrait passer.

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:16 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/11 "2016-02-21T11:16:22Z")

</div>

Ben je t’avoue, je connais pas PostgreSQL. Quand je disais “blob” c’est le terme générique : une séquence d’octets, peu importe ce qu’il y a dedans. À vue de nez le type bytea semble effectivement convenir. Pour l’échappement je sais pas, encore une fois j’utilise toujours des requêtes paramétrées (on en a déjà discuté, si j’ai bon souvenir avec pqxx ils appellent ça des “prepared statements”).

[quote=“MisterFreez”]Tu peux configurer ta base en utf8 : [postgresql.org/docs/current/ … ibyte.html](http://www.postgresql.org/docs/current/static/multibyte.html)  
En suite en utilisant les wstring ça devrait passer.[/quote]  
Non justement son problème c’est que la chaîne à stocker n’est pas de l’UTF-8 valide (le filesystem autorise n’importe quelle séquence d’octets sans imposer qu’elle soit compatible UTF-8).

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/12 "2016-02-21T11:17:12Z")

</div>

[quote=“syam”]Ben je t’avoue, je connais pas PostgreSQL. Quand je disais “blob” c’est le terme générique : une séquence d’octets, peu importe ce qu’il y a dedans. À vue de nez le type bytea semble effectivement convenir. Pour l’échappement je sais pas, encore une fois j’utilise toujours des requêtes paramétrées (on en a déjà discuté, si j’ai bon souvenir avec pqxx ils appellent ça des “prepared statements”).  
[/quote]  
+1  
j’utilise déja prepared, la base et le clients est en utf8 , le problème reste que c’est pas du vrai blob puisqu’il faut quand meme gerer le contenu pour faire l’échappement …

[quote]

[quote=“MisterFreez”]Tu peux configurer ta base en utf8 : [postgresql.org/docs/current/ … ibyte.html](http://www.postgresql.org/docs/current/static/multibyte.html)  
En suite en utilisant les wstring ça devrait passer.[/quote]  
Non justement son problème c’est que la chaîne à stocker n’est pas de l’UTF-8 valide (le filesystem autorise n’importe quelle séquence d’octets sans imposer qu’elle soit compatible UTF-8).[/quote]  
+1  
sans compter les différent fs et sous unix je te dit pas le nombre de local qu’il y a …  
wstring ,j’ai tester rien de concluant le problème reste.

Put\*ng sa fait 4 jours que je suis dessus … je tourne en rond entre: wstring,libpqxx,unicode,bytea,hexa … ![:101](https://www.debian-fr.org/uploads/default/original/1X/1b91d67e0290dc638aa72d87f05d6cee4a61d04e.gif "yeux-roulent") ![:angry-banghead:](https://www.debian-fr.org/uploads/default/original/1X/03590d98a359a447ce7713c78201cdb8a8cfdb6b.gif "Bang Head") ![:angry-banghead:](https://www.debian-fr.org/uploads/default/original/1X/03590d98a359a447ce7713c78201cdb8a8cfdb6b.gif "Bang Head") ![:angry-banghead:](https://www.debian-fr.org/uploads/default/original/1X/03590d98a359a447ce7713c78201cdb8a8cfdb6b.gif "Bang Head")

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/13 "2016-02-21T11:17:16Z")

</div>

Fais voir ton code (juste le prepared statement) qui correspond à une colonne bytea. À priori il faut utiliser pqxx::prepare::treat\_binary lors du prepare().

[pqxx.org/devprojects/libpqxx/doc … 00193.html](http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/a00193.html)  
[pqxx.org/devprojects/libpqxx/doc … 00189.html](http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/a00189.html)

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/14 "2016-02-21T11:17:22Z")

</div>

[quote=“syam”]Fais voir ton code (juste le prepared statement) qui correspond à une colonne bytea. À priori il faut utiliser pqxx::prepare::treat\_binary lors du prepare().

[pqxx.org/devprojects/libpqxx/doc … 00193.html](http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/a00193.html)  
[pqxx.org/devprojects/libpqxx/doc … 00189.html](http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/a00189.html)[/quote]  
teste le problème reste le meme:

```auto
(*p_connect).prepare("InsTprincipal",cSI.Get_InsertTPrincipal()) ("integer")("bytea",pqxx::prepare::treat_binary)("");//dernier paramettre clef auto primaire
```

note je les ai essayer les 3

```auto
(*p_connect).prepare("InsTprincipal",cSI.Get_InsertTPrincipal()) ("integer")("bytea",pqxx::prepare::treat_binary)("");
(*p_connect).prepare("InsTprincipal",cSI.Get_InsertTPrincipal()) ("integer")("bytea",pqxx::prepare::treat_string)("");
(*p_connect).prepare("InsTprincipal",cSI.Get_InsertTPrincipal()) ("integer")("bytea",pqxx::prepare::treat_direct )("");
```

```auto
//pour info
cSI.Get_InsertTPrincipal() = INSERT INTO table_principal(exist,datescan,path,keyid) VALUES ($1,$2,$3,default)
```

la collonne est bien en bytea ,verifier avec pgadmin3  
y a pas a dire je suis coincer la dessu … fait ch…

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/15 "2016-02-21T11:17:22Z")

</div>

Et avec pqxx::transaction\_base::esc\_raw(), toujours en utilisant treat\_binary pendant le prepare ? (avec pqxx::binarystring pour relire la valeur lors d’un SELECT)

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/16 "2016-02-21T11:17:22Z")

</div>

C’est un coup à me faire taper sur le doigts…

Purée! J’entrave pas un mot de votre discussion! ![:005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif "chaud")  
(y’a juste string qui me fait quand même penser à quelque chose… et encore, en hexadécimal j’ai du mal à visualiser…)

😆➡

---

<div class="post-metadata">

**Author:** ![M3t4linux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/5daacb/32.png) [@M3t4linux](https://www.debian-fr.org/u/M3t4linux)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/17 "2016-02-21T11:17:23Z")

</div>

[quote=“lol”](y’a juste string qui me fait quand même penser à quelque chose… et encore, en hexadécimal j’ai du mal à visualiser…)

😆➡[/quote]

😆😆 ![:005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif "chaud") ![:005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif "chaud")

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/18 "2016-02-21T11:17:29Z")

</div>

> [@syam](#):
>
> Et avec pqxx::transaction\_base::esc\_raw(), toujours en utilisant treat\_binary pendant le prepare ? (avec pqxx::binarystring pour relire la valeur lors d’un SELECT)

bon j’ai fait l’insert , tu peux me dire comment je tourne ton binarystring dans ma boucle ?

```auto
//const int bufSize = 1;
char buffer1[35]="Ma�anaDB.pdb (codage non valide)"; // some raw data
buffer1[0] = 0x89;

const std::string Esc = (*p_connect).esc_raw(reinterpret_cast <const unsigned
char *> (&buffer1), 2);
*p_work).prepared("InsTprincipal")(exist)(datescan)(Esc).exec();
```

sa passe mai avec:

```auto
*p_work).prepared("InsTprincipal")(exist)(datescan)(Esc).exec();
```

c’est lier aux buffer1 le style C c’est … ![:doh:](https://www.debian-fr.org/uploads/default/original/1X/78536cf08b5cbccb06a10e44ddb8da50bfc1554d.gif "Doh!")

pour la relecture du select un ptit coup de main ? ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

```auto

    for (pqxx::result::const_iterator cit = r.begin();
         cit != r.end();//boucle sur le nombre de tuple (ligne renvoiyée)
         ++cit)

		//boucle sur les collonnes
		for (unsigned int countcol = 0; countcol < r.columns();countcol++){

//j'affiche avec (enfin presque )
// std::cout <<(*cit)[countcol].as(int ()) << deco ;
              std::cout <<(*cit)[countcol].c_str();
```

> [@](#):
>
> AFFICHE1 || 1 || 02:45:55 || \211a || 1 |

c’est vraiment ce qu’on veux :S  
je cherche encore dans la doc mai rien pour le moment.

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/19 "2016-02-21T11:17:34Z")

</div>

> [@panthere](#):
>
> [quote]AFFICHE1 || 1 || 02:45:55 || \211a || 1 |

c’est vraiment ce qu’on veux :S[/quote]  
Bah oui. Lorsque tu stockes, ton premier caractère est 0x89 (décimal 137, octal 211), le deuxième a, et tu indiques à esc\_raw de ne prendre en compte que les deux premiers caractères : esc\_raw(… , 2);  
Si tu veux stocker l’intégralité de ta chaîne il faudrait peut-être indiquer la bonne longueur. 😉

> [@panthere](#):
>
> pour la relecture du select un ptit coup de main ? ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

Dans ta boucle for tu ne peux pas traiter toutes les colonnes de la même manière !  
Si tu tiens absolument à utiliser une boucle, il faut traiter ta 3ème colonne (index 2 comme on part de zéro) différemment (je pars du principe que «&nbsp;AFFICHE1&nbsp;» ne fait pas partie des résultats) :

`for (unsigned int countcol = 0; countcol < r.columns(); ++countcol)
{
  std::string valeur;
  if (countcol == 2)
    valeur = pqxx::binarystring((*cit)[countcol]).str();
  else
    valeur = (*cit)[countcol].c_str();
  std::cout << valeur;
}`  
Perso j’aime pas trop cette manière de faire, je préfère extraire les valeurs de chaque colonne de manière explicite dans des variables séparées (ce qui implique aussi d’indiquer les champs de manière explicite dans le SELECT – ça exclut donc les requêtes de type SELECT \* FROM… dont le résultat change en fonction du schéma de la table):

`bool exist = (*cit)[0].as<bool>(); // peut-être même pas besoin d'indiquer la spécialisation, elle devrait être inférée grâce au lhs => bool exist = (*cit)[0].as() à tester
std::string datescan = (*cit)[1].as<std::string>(); // même remarque
std::string path = pqxx::binarystring((*cit)[2]).str();`  
Sinon tu peux aussi garder ta boucle for et te baser sur le type de la colonne (\*cit)[colonne].type() afin de traiter ça dans un switch…

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 11:17 UTC](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423/20 "2016-02-21T11:17:35Z")

</div>

Bon Zalor vala ce que sa donne .  
je met que l’utile  
edit petite modification :

```auto
char my_str[]="Ma�anaDB.pdb (codage non valide)";
int l_my_str = sizeof(my_str);
//buffer1[0] = 0x89;

const std::string Esc = (*p_connect).esc_raw(reinterpret_cast <const unsigned
char *> (&my_str), l_my_str);

const std::string Esc = (*p_connect).esc_raw(reinterpret_cast <const unsigned
char *> (&buffer1), 37);

(*p_work).prepared("InsTprincipal")(exist)(datescan)(Esc).exec();
// j'affiche donc la valeur avec la bonne collonne celle qui donc a la valeur qui nous interesse,
//je supose que .c_str() devrai faire l'affaire seulement .....
std::cout <<(*cit)[countcol].c_str() << deco ;
```

sa donne a l’execution:

```auto
 Ma\357\277\275anaDB.pdb (codage non valide)\000
```

euh je comprend rien la je doit dire ?? ![:017](https://www.debian-fr.org/uploads/default/original/1X/7bbea83f89515ab7c7a738dddb86c4d4f140bd13.gif "reflechit")

[Page suivante](https://www.debian-fr.org/t/c-std-string-en-hexadecimal/52423.md?page=2)
