Math1004
Messages postés15Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention 2 mai 2009
-
13 janv. 2008 à 22:17
Math1004
Messages postés15Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention 2 mai 2009
-
14 janv. 2008 à 16:53
Salut a tous .
Je debute en C++ ( je viens de m y mettre pour faire un cgi ^^ ) .
En bref , j ai un formulaire qui envoie des données je les recuperes et je les affiches . Jusque la pas de probleme .
Puis , idée "bete" : que se passe t il si je tape autre chose que "toto" pour faire mon test . Je tape donc "yéé ca marche" .
ET LA c le drame a la place de é je me retrouve un bo %E9 et a la place des espace des + donc bon je les decodes peniblement ( meme si c été tout con enfaite mais bon j ai lutté pour pas grand chose .. ) et je fini par obtenir en gros
et bon y a pas a dire c'est super chiant/rebarbatif a faire .
Pour finir ( enfin ^^ mais bon j essaye d expliqué au mieu le probleme :) pour obtenir une super aide ^^) je souhaite donc savoir si il y a un moyen ( une espece de formule mathematique/ automatique ) qui sert a faire ca tout seul :p ou une fonction de string je ne c pas j ai rien trouvé ... ( enfin si un str:decode-uri mais je c pas dans kel langage :( :s ) ..
Math1004
Messages postés15Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention 2 mai 2009 13 janv. 2008 à 23:43
bon ba j ai commencé a codé un script javascript pour voir ce que renvoie l encoder decoder URI et enfaite il ne s agit pas de ca mais d un codage escape/unescape javascript au vu des valeurs .
Je comprends pas pourquoi tous mes caracteres ne sont pas codé pareil ( les lettres normal de sont pas passé dans la fonction escape apriori etant donné que je recupere les lettre normales alors que les caracteres speciau sont passé dedans .. bref je comprend pas tout de comment c fais mais bon xD ) .
Suite a cette decouverte de codage et de nouvelles recherches , j ai trouvé ca :
Math1004
Messages postés15Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention 2 mai 2009 14 janv. 2008 à 00:12
Euh , je veux bien mais j ai pas saisi comment ca marche la o_o .
moi j ai juste un string de taille quelconque qui contient un mot ou certains caractere sont passé par escape .
j ai pas BYTE* In, BYTE* Out, DWORD InSize ( je c meme pas ske c a dire vrai ... )
je debute en c++ ( a dire vrai ca ressemble presque a du c enfaite c juste pou utilisé string plutot que les char* c plus simple et il y a des ptites fonctions qui aide type string.substr et string.find ( me permet de trouvé le caractere special a echangé )
Peut tu m expliqué ta fonction pour que j essaye de l adapté ou lui donné ski fau pour qu elle fonctionne ? :) merci pour ton aide
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 14 janv. 2008 à 14:25
Salut,
Le lien que tu as donné (web20tools.net...), c'est du dotnet.
Le dotnet est une des principales causes de décès chez les développeurs.
A éviter donc.
(Rooooh, c'est petit ça.)
La méthode de Neo_Fr prent 3 arguments :
L'adresse de la chaîne à traduire.
L'adresse de la chaîne où la traduction sera mise en place.
La taille de la chaîne à traduire.
Tu peux convertir une string à partir d'un char * avec la méthode c_str(), et récupérer la taille avec length().
Problème : c_str ne renvoie pas forcément un pointeur sur la vrai chaîne, autrement dit, modifiée ce qui est pointé par c_str() ne modifie pas forcément la string. Donc pour le buffer, c'est rappé. Faudrait passer par un char *.
Tu peux par contre essayer de réécrire la fonction de Neo_Fr en C++.
Vala ce que ça me donne :
string __stdcall Convert(string & In)
{
string Out;
const BYTE Table[] = {'à', 0x00, 'â', 'ã', 'ä', 0x00, 0x00, 0x00,
0x00, 'è', 'é', 'ê', 'ë', 'ì', 'î', 'ï' }; DWORD i 0, j 0, sub;
while(1)
{
if((i < In.length() - 2) && (*((WORD*) &In[i]) == 'E%'))
{
sub = (In[i+2] > 0x39) ? 0x37 : 0x30;
Out += Table[ (In[i+2]-sub) ];
i+=2; j++;
}else Out+= In[i];
if(i++ >= In.length()) break;
}
return Out; // renvoi la taille de Out
}
J'ai rajouté un test car si (i In.length() - 1), lorsque l'on fait le (*((WORD*) &In[i]) 'E%'), on risque de dépasser la fin de la chaîne si elle n'a pas de zéro terminal.
Réecrite comme ça, les performances en prennent probablement un coup à cause de la classe string en général et de la concaténation en particulier.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Math1004
Messages postés15Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention 2 mai 2009 14 janv. 2008 à 16:53
ah je comprend mieu comment utilisé ta fonction parce que moi je fais avec des strings pas des char * ^^
bon par contre je capte pas trop comment ca marche le truc donc bon je vous file un bout du truc super pete cou..... que j ai fait .. ( optimisation : 0 ^^ ) mais bon ca marche et je comprend comment ^^