IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Conversion d'un char en unsigned char (caractere étendu)


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 310
    Points : 184
    Points
    184
    Par défaut Conversion d'un char en unsigned char (caractere étendu)
    Bonjour,
    Lors du passage d'un paramètre dans ma DLL les caractères étendues (supérieur à 127) sont mal interprétés. Hors le problème survient de la conversion de mon char * en unsigned char *, qui s'effectue via un simple cast, les caractères sont érronés.

    Existe t il une méthode de conversion clair pour prendre en compte ses dit caractères ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    J'ai l'impression qu'il manque quelques infos?
    En brut: aurais-tu une appli en UNICODE et une DLL en non UNICODE?
    Sinon, il faudrait un peu plus d'info?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 310
    Points : 184
    Points
    184
    Par défaut
    la DLL est en C++ (ecrit avec visual c++ 6) , l'application de test est en delphi 2006 (win32); l'application envoi un tableau de pchar qui est réceptionné en char *, hors tout les caractères du jeu étendu sont systématiquements erronés.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je ne connais pas DELPHI. Quelques questions de bases : lorsque tu invoques la DLL depuis ton application, maîtrises-tu la façon dont sont passés les paramètres ? As-tu regardé en mémoire si tu recevais correctement ton tableau de char (dans un premier temps en non étendu).

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Les codes de caractères supérieurs à 127 ne sont pas standards et peuvent donc être interprétés différemment par ton programme et ta DLL. Commence donc par vérifier qu'ils utilisent tous deux le même jeu de caractères.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 310
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    Les codes de caractères supérieurs à 127 ne sont pas standards et peuvent donc être interprétés différemment par ton programme et ta DLL. Commence donc par vérifier qu'ils utilisent tous deux le même jeu de caractères.
    Les 2 utilisent le même jeu de caractères , la seul chose qui change c'est qu'à un moment donné, la conversion change complètement le contenu de la chaine de caractère.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est contradictoire, tu parles de contenu changé suite à une conversion, mais dans ton premier message tu parles de simple cast de char* en unsigned char*.

    Si tu nous montrais plutôt du code ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 310
    Points : 184
    Points
    184
    Par défaut
    Solution trouvé qui n'a rien à voir, les jeux de caractères étaient tout simplement différent (ansi et ASCII)

    la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	if (!isascii(p)) {
    			CharToOem((const char *) &p,&df);
    			_message[i]= df;
    	}

  9. #9
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Heu... j'y perds mon latin là....

    En quoi le contenu peut-il être différent ?
    Il peut être INTERPRETE différemment, mais c'est la même chose qui est passé que ce soit un char* ou un unsigned char*

    Donc la question est plutôt... d'ou viennent les caractères ... et comment fais tu pour savoir qu'ils ne sont pas bons ?

    Sous Windows...
    Si c'est sous le débugeur.. celui-ci utilise (par défaut le systeme 'ANSI', c'est à dire le codepage par défaut du langage sélectionné par l'utilisateur courant).
    Certains fonctions DOS (ou anciennes) utilisent le système OEM.
    Mais dans tous les cas... depuis environ 10 ans (puisqu'il existe les librairies nécessaires pour Windows 95)... il est préférable d'utiliser UNICODE.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    @nicroman : Le problème majeur, c'est que la console, à moins que tu la lises en Unicode, est en OEM.

    Donc, un simple fgets() te donnera du texte en OEM, et si tu rediriges un fichier vers ton programme, il s'attendra également à ce que le fichier soit en OEM ! (genre, un fichier écrit avec EDIT).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/03/2011, 17h14
  2. Réponses: 2
    Dernier message: 03/04/2009, 17h46
  3. [Clé de registre] Conversion char* vers unsigned char*
    Par The Lord of Nesquik dans le forum C
    Réponses: 7
    Dernier message: 03/07/2006, 23h30
  4. vector<unsigned char> et unsigned char* : conversion ?
    Par zax-tfh dans le forum SL & STL
    Réponses: 5
    Dernier message: 15/01/2006, 10h43
  5. char et unsigned char
    Par jobherzt dans le forum C++
    Réponses: 8
    Dernier message: 11/02/2005, 00h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo