C++ std:string en hexadécimal ?

Déjà, commence par utiliser des std::string au lieu de chaînes C. Ça t’évitera de te planter en comptant plus ou moins de caractères qu’il n’y en a en réalité (les zéro à la fin…).

std::string path = "Ma�anaDB.pdb (codage non valide)"; path = (*p_connect).esc_raw(path);

Non !
.c_str() te retourne une chaîne encodée (normalement la même que path après esc_raw), pour la décoder et retrouver ta valeur d’origine il faut utiliser binary_string :

[quote=“syam”]Déjà, commence par utiliser des std::string au lieu de chaînes C. Ça t’évitera de te planter en comptant plus ou moins de caractères qu’il n’y en a en réalité (les zéro à la fin…).

std::string path = "Ma�anaDB.pdb (codage non valide)"; path = (*p_connect).esc_raw(path);
[/quote]
Euh non sa veux pas parce que:

error: no matching function for call to ‘pqxx::basic_connection<pqxx::connect_direct>::esc_raw(const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’

j’editer le poste plus haut mai t’a du passer juste avant :wink:

j’ai donc fait a la place

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);

j’ai une erreur de compile avec le scond code que tu ma donner

std::string valeur = pqxx::binary_string((*cit)[countcol]).str();
error: ‘pqxx::binary_string’ has not been declared|

Pour l’appel du esc_raw(const std::string&) l’objet à utiliser est la transaction (pqxx::transaction) et non pas la connexion (pqxx::basic_connection) – j’ai pas fait gaffe sur le coup.
Pour binary_string c’est aussi une erreur de ma part, en réalité c’est binarystring sans underscore entre les deux.

Pour t’y retrouver facilement dans la doc : pqxx.org/devprojects/libpqxx/doc … /main.html
Onglet “Classes” => toutes les classes définies par la lib
Une fois que tu es sur ces onglet, il y a un sous-onglet “Class Members” qui liste toutes les méthodes par ordre alphabétique, en indiquant à quelle(s) classe(s) chacune appartient.
Faut jamais oublier que la programmation, c’est avant tout savoir lire la doc… :wink:

[quote=“syam”]Pour l’appel du esc_raw(const std::string&) l’objet à utiliser est la transaction (pqxx::transaction) et non pas la connexion (pqxx::basic_connection) – j’ai pas fait gaffe sur le coup.
Pour binary_string c’est aussi une erreur de ma part, en réalité c’est binarystring sans underscore entre les deux.

Pour t’y retrouver facilement dans la doc : pqxx.org/devprojects/libpqxx/doc … /main.html
Onglet “Classes” => toutes les classes définies par la lib
Une fois que tu es sur ces onglet, il y a un sous-onglet “Class Members” qui liste toutes les méthodes par ordre alphabétique, en indiquant à quelle(s) classe(s) chacune appartient.
Faut jamais oublier que la programmation, c’est avant tout savoir lire la doc… :wink:[/quote]

arf la doc ,ta pas idée de la quantité que j’ai lu en 4 jours certes en traver … :101 :101 :101 et c’est bien la le problème :confused:
la doc je commence a la connaitre ,mai pas forcement l’appliquer :doh:

sinon c’ette fois on dirait que c’est bon.

					valeur = pqxx::binarystring((*cit)[countcol]).str();
					std::cout <<valeur << deco ;

la sortie est identique. bon il va faloire que je trie le bor*el que j’ai fait dans mes sources :033

Merci du coup de pouce , tu ma enlever une sacrée épine :023 :023
je te dirait si sa passe les teste ce soire

Finalement il y a un petit souci qui c’est rajouter:

//en bref la déclaration de la fonction
void cSqlPqxx::InsertTPrincipal(const int & exist,const std::string & datescan,
									 const std::string & path)


std::cout << "===============Path====>"<< path << std::endl;
//le resulta(donnée) est pris a l'execution
const char * my_str = path.c_str();
size_t l_my_str = path.size();
//le resulta(donnée) est pris a la compilation
/*char my_str[]="/home/taz/Test/Ma�naDB.pdb";
int l_my_str = sizeof(my_str);*/

Je vai essayer de faire simple,mai quand c est compliquer :S

dans le premier cas, le path reçois la string directement du disque a l’execution puisque passe en paramettre. du coup le resulta est pas le meme et évidament est faux:

dans le 2 resulta est ok:

très certainement parce que c’est l’utf8 du fichier (le *.cpp) de la compilation qui est pris en compte.

donc retour a la case dépar
le code suivant :

const char * my_str = path.c_str();
size_t l_my_str = path.size();

devrai être juste. puisque passer en paramettre, cepandant la conversion string char pose probleme , ou alors c’est plus loins dans la db que sa colle pas ?

[quote=“panthere”]le code suivant :

const char * my_str = path.c_str();
size_t l_my_str = path.size();

devrai être juste. puisque passer en paramettre, cepandant la conversion string char pose probleme , ou alors c’est plus loins dans la db que sa colle pas ?[/quote]
Oui ça devrait être bon. std::string se contrefout que tu sois en UTF-8, en ISO-8859 ou n’importe quoi d’autre, pour lui une chaîne c’est juste une séquence d’octets.
Faudrait voir ce que contient la variable path, et quelle est sa longueur :

Éventuellement écris aussi la variable dans un fichier, pour que tu puisses l’éditer en hexa et voir exactement quels caractères elle contient.

Le tout avant stockage dans la DB, et après l’avoir relu.

[quote=“syam”][quote=“panthere”]le code suivant :

const char * my_str = path.c_str();
size_t l_my_str = path.size();

devrai être juste. puisque passer en paramettre, cepandant la conversion string char pose probleme , ou alors c’est plus loins dans la db que sa colle pas ?[/quote]
Oui ça devrait être bon. std::string se contrefout que tu sois en UTF-8, en ISO-8859 ou n’importe quoi d’autre, pour lui une chaîne c’est juste une séquence d’octets.
Faudrait voir ce que contient la variable path, et quelle est sa longueur :

Éventuellement écris aussi la variable dans un fichier, pour que tu puisses l’éditer en hexa et voir exactement quels caractères elle contient.

Le tout avant stockage dans la DB, et après l’avoir relu.[/quote]
dans un fichier ? … euh je croit pas que sa soie d’une utiliter , vu que j’avais tenter en debut de post de le faire, et que sur differente machine la valeur change. sinon la longueur renvoiyée est de 27 .