problème de conversion unsigned const char* => const char*

problème de conversion unsigned const char* => const char* - C++ - Programmation

Marsh Posté le 05-04-2011 à 01:52:05    

Je reviens vers vous car je n'ai pas trouvé de solutions à mon problème de conversion de const char* en unsigned const char*. reinterpret_cast me semble le plus pertinent.
Mais ce n'est pas le cas, apparemment il me génère un problème.
 
en effet, je dois utliser une fonction OpenSSL pour décodé un string ( format PEM codé en base 64, en une structure interne C ( internal C structure ). Voici le prototype de la fonction:

Code :
  1. X509 *d2i_X509(X509 **px, const unsigned char **in, int len);


 
la doc se trouve ici : http://www.openssl.org/docs/crypto/d...#RETURN_VALUES
En gros cette fonction lit un string en format PEM qui se trouve dans const unsigend char **in et renvoie une structure X509*
 
Maintenant, pourquoi j'ai utilisé un cast ? parce que mon constructeur prend en paramètre un PEM de type const char *str. Voici le code :

Code :
  1. certificate(const char *str, size_t clen) {
  2.      unsigned char const *u_str = reinterpret_cast< unsigned char const * >(str);
  3.      X509* mycert = d2i_X509(NULL, &u_str, clen);


 
A priori, je ne peux/dois pas changer la signature de ce constructeur. Donc je suis obligé de partir d'un const char *str.
quand je debug, mycert est NULL, ca signifie que d2i_X509 a échoué. l'erreur est en fait :

Code :
  1. error:0D07209B:asn1 encoding routines:ASN1_get_object:too long


 
Je crois que c'est à cause du reinterpret_cast.
Est ce que il y a d'autres moyen de résoudre le problème de conversion const char* => unsigned const char* ?
 
Merci d'avance pour votre aide.


Message édité par razuki le 05-04-2011 à 01:52:42
Reply

Marsh Posté le 05-04-2011 à 01:52:05   

Reply

Marsh Posté le 05-04-2011 à 08:40:12    

c'est un bete static_cast ici qu'il faut.
 
es tu sur que ton pointeur est bien alloué en rentratn dans ton constructeur ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed