Excuser moi, de vous poser cette question toute bête, mais je n'arrive pas a trouver a cette question:
Savez vous comment on converti une donné u_char en une donné char
merci!
Version imprimable
Excuser moi, de vous poser cette question toute bête, mais je n'arrive pas a trouver a cette question:
Savez vous comment on converti une donné u_char en une donné char
merci!
Ca passe pas ca ?Code:
1
2
3
4 char a; u_char b; a = (char) b;
Y'a peut etre mieux mais pour ma part, j'aurais simplement fait ce petit cast (en meme temps j'ai pas testé ... mais je vois pas trop pk ca ne passerait pas)
excuse moi, g mal posée le probleme:
j'ai une valeur:
et j'aimerais la mettre sous la forme:Code:const u_char *packet
et j'ai beaucoup de malCode:const char *paquet
strcpy(a, b) ?
ta solution d'avant était mieux, elle générait moin d'erreur, de plus il me semble que strcpy n'utilise pas les u_char!
Apres réflexion, sprintf doit pouvoir t'aider a merveille
sprintf(a, "%s", b); devrait passer
Sa ne le prend toujours pas car, ma variables paquet est une constante et sprintf ne le prend pas!
bah j'avoue pas connaitre la fonction qu'il te manque.
Au pire, tu dois pouvoir faire, en partant de ma 1ere solution :
Mais c'est quand meme très laid ...Code:
1
2
3
4 int i = 0; a = new char[strlen(b)]; for(i = 0; i < strlen(b); i++) a[i] = (char) b[i];
sa ne marche pas top non plus!
Le dernier code de Worldofdada me paraît la bonne solution (au +1 près pour la longueur et le \0), sauf que c'est exactement ce que std::copy fait.
Au fait, pourquoi dois-tu jongler entre les unsigned char* et les char* ?
la variable u_char est utiliser par deux méthode et la méthode suivante ne marche qu'avec des char, donc pour cela je doit effectuer une conversion tout en faisant attention de ne pas perturber les autres classes. quand j'utilise strcpy, il me créé des erreurs dans une classe précédente, je ne te dit pas la prise de tête!
Si je réussie a régler se probleme, cela me débloque dans bien des endroits!!! :?
Code:
1
2
3
4
5
6
7 #include <algorithm> u_char* Truc = ... tes données ... int Taille = ... taille de Truc ... char* Machin = new char[Taille]; std::copy(Truc, Truc + Taille, Machin);
hola!!! sa ne doit pas etre sa, sa m'affiche une cinquantaine d'erreure!!!
a croire qu'il n'existe rien pour ma conversion!!!!
Si tu nous montrais plutôt ces 50 erreurs ?
J'avoue que 50 c'est exagéré mais y'en a quelques une. voici une partie de mon code:
{invalid conversion from `const char*' to `char*'Code:
1
2
3
4
5
6
7
8
9 void AnalyseurTraficEthernet::wrapperCallback(u_char *user,const struct pcap_pkthdr *hdr,const u_char *packet) { user=NULL; hdr=NULL; AnalyseurTraficEthernet * objAnalyseurTraficEthernet = (AnalyseurTraficEthernet*) ptObjetAnalyseurTraficEthernet; const char * paquet= new char[200]; std::copy(packet, packet + 200, paquet); objAnalyseurTraficEthernet->callback(paquet); }
initializing argument 1 of `void AnalyseurTraficEthernet::callback(char*)}
->se trouvant sur :
{instantatied from `_Outputlter std::__copy_aux2(_inputlter,_inputlter,_Oooutputlter,__true_type) [with_Inputlter = cnst u_char*,_Ooutputlter = cnst char*]'Code:objAnalyseurTraficEthernet->callback(paquet);
instantatied from `_Outputlter std::__copy_ni2(_inputlter,_inputlter,_Oooutputlter,__true_type) [with_Inputlter = cnst u_char*,_Ooutputlter = cnst char*]'
instantatied from `_Outputlter std::__copy_ni1(_inputlter,_inputlter,_Oooutputlter,__true_type) [with_Inputlter = cnst u_char*,_Ooutputlter = cnst char*]'
instantatied from `_Outputlter std::__copy(_inputlter,_inputlter,_Oooutputlter,__true_type) [with_Inputlter = cnst u_char*,_Ooutputlter = cnst char*]'}
->se trouvant dans le stl_algobase.h
instanted from here
-> se trouvant sur:
assignement of read-onlyCode:std::copy(packet, packet + 200, paquet);
->se trouvant dans le stl_algobase.h
Bon en fait tu n'as qu'une erreur (les fonctions standard à base de templates portent souvent à confusion, quand ils provoquent des erreurs).
Forcément, si tu veux modifier une chaîne constante, le compilo va râler. Utilise un char* non-const, ce n'est pas parce que ta fonction prend un const char* que tu ne peux pas lui fournir un char*. Cela indique juste que cette fonction ne modifiera pas son paramètre.
Je te remercie, tout de suite le logiciel m'agresse moins les yeux avec moins de rouge mais le il me met des erreur dans des fonctions qui marchait tres bien avant, meme dans une appelle de fonction!
Code:AnalyseurTraficEthernet * objAnalyseurTraficEthernet = (AnalyseurTraficEthernet*) ptObjetAnalyseurTraficEthernet;
Code:undefined reference to {ptObetAnalyseurTraficEthernet'
et il me l'affiche deux fois!
ptObjetAnalyseurTraficEthernet est défini où ?
C'est une erreur de frappe dans ton post ou dans ton code, le fait qu'il lui manque un 'j' dans le message d'erreur ?
je l'ai définit dans le .h
pour le j c'est une erreur de frappe!Code:extern void* ptObjetAnalyseurTraficEthernet;
sinon j'ai essayer une autre façon mais san grand résultat
avec reinterpret_cast. moin de probleme mais sa ne veut pas convertir!
Il faut définir ta variable dans une unité de traduction (fichier .cpp), en + de la déclaration dans l'en-tête avec extern.
http://c.developpez.com/faq/c/?page=...TYPES_globales