Problème de conversion unsigned const char* => const char
razuki
Messages postés242Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 5 décembre 2012
-
5 avril 2011 à 01:48
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 2014
-
7 avril 2011 à 00:14
Bonjour,
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 après avoir lu http://cpp.developpez.com/faq/cpp/?page=conversions 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:
X509 *d2i_X509(X509 **px, const unsigned char **in, int len);
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 5 avril 2011 à 10:40
Avant de caster, il ne faut pas oublier que transformer un unsigned en signed, ne se fait jamais sans danger.
Le reinterpret_cast ne devrait pas poser de souci.
As-tu essayé le d2i_X509 sans faire de cast en changeant (temporairement) le constructeur de "certificate", pour avoir le bon type ?
Si le problème est toujours là, alors c'est que c'est les données sur lesquelles tu travailles qui sont fausses et non le cast. (Erreur classique, le cert a été enregistré en Text au lieu de Binary).
PS: Si tu fais du C++, alors "certificate(const char *str, size_t clen)" devrait être "certificate(const std::string& str)", tout simplement.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
razuki
Messages postés242Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 5 décembre 2012 5 avril 2011 à 12:44
Je code en c++, mais j'utilise beaucoup de char* et unsigned char* car le code contient plusieurs fonctions C.( j'ai repris un projet écrit à la façon C ). Mais je vais essayer d'utiliser des std::string tant que possible.
Sinon,
J'ai essayé de mettre des unsigned char là ou il faut et j'ai modifié aussi mon constructeur en certificate(unsigned char* ) mais ca m'a généré une autre erreur suivante:
error: ambiguous overload for ‘operator=’ in ‘((isl::certificate<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)this)->isl::certificate<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::data = u_out’
data est ici l'unsigned char* que je voulais mettre dans mon constructeur certificate(unsigned char*, size_t len) et u_out est un unsigned char* initialisé dans un i2d_X509(..., &u_out)
Vous n’avez pas trouvé la réponse que vous recherchez ?
razuki
Messages postés242Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 5 décembre 2012 6 avril 2011 à 13:41
CptPingu, tu as dit que transformer un unsigned en signed, ne se fait jamais sans danger.
Comment je peux transformer un unsigned char* en signed char* tout en s'assurant qu'il n'y a pas de danger => est ce que il y a une technique, une facon de faire ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 6 avril 2011 à 13:48
Travail toujours avec le même type de donné, c'est généralement mieux.
Si tu choisis des unsigned, reste avec des unsigned. Ne mélange jamais les deux.
Si tu ne peux faire autrement, tant pis, tu peux faire un cast, mais il y a un risque, si tu as une valeur "signed" négative et que tu passes en unsigned, le comportement sera inattendu...
Idem, de l'autre côté, si tu as une valeur "unsigned" très élévé, en la passant en signed, tu auras aussi une comportement étrange (te retrouver avec une valeur négative par exemple).
Pour répondre à ta question, il n'y a pas de méthode sure. A toi de vérifier une par une les valeurs, afin de t'assurer qu'elle reste dans les bornes.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question