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 :

Conversions : String->int et int->TCHAR


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut Conversions : String->int et int->TCHAR
    Bonjour,

    Dans un projet MFC, sous Visual Studio 2005, j'ai besoin de récupérer convertir un string, entré par l'utilisateur en format hexadécimal en int, de faire quelques traitement dessus, puis de le passer en TCHAR.

    Par exemple :

    L'utilisateur entre la valeur AD5, dans un Edit Control (MFC).
    Je récupère cette valeur dans un string (je sais faire)
    Je convertis cette valeur en int, sous forme décimale : 2773 (je sais pas faire )
    Opérations éventuelles
    Je convertis la valeur obtenue en TCHAR, sous forme héxadécimale (je sais pas faire ).

    La valeur entrée sera comprise entre 0000 et FFFF.

    J'ai déjà une fonction pour convertir les strings en int, mais elle ne marche pas pour de l'héxa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int StringToInt(std::string in)
    {
    	int out;
    	istringstream iss( in );
    	iss>>out;
    	return out;
    }
    Le but est de créer un fichier avec comme nom la valeur héxa modifiée, il n'est peut être pas nécessaire de faire tout ça. Si quelqu'un a une autre solution, je veux bien aussi.

    Merci d'avance pour votre aide, je n'ai aucune idée de comment faire ces conversions...

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par CyberSlan Voir le message
    J'ai déjà une fonction pour convertir les strings en int, mais elle ne marche pas pour de l'héxa
    http://cpp.developpez.com/faq/cpp/?p...am_hexa_to_int


    Pour convertir en "TCHAR", il te faut un tableau de TCHAR pour stocker le resultat. Les CString des MFC ont tout ce qu'il faut pour cela (=> FAQ VC++).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    Merci beaucoup,

    Je regarde ça dés que possible (ce soir, mais peut être tard)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    Pour convertir en "TCHAR", il te faut un tableau de TCHAR pour stocker le resultat. Les CString des MFC ont tout ce qu'il faut pour cela (=> FAQ VC++).
    C'est possible d'avoir un peu plus de précision?

    Je ne vois pas le lien avec les CString pour passer d'un int en TCHAR
    Je n'ai pas trouvé non plus dans la faq comment convertir de CString en TCHAR.

    Sinon, merci pour le lien pour l'hexa, ça marche correctement.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Un TCHAR, c'est un seul caractère.
    Que veux-tu dire exactement par "convertir en TCHAR" ?
    • Faire un TCHAR dont le code de caractère est égal à la valeur du int?
    • Formater le int en décimal dans une chaîne de TCHARs ?
    • Formater le int en hexadécimal dans une chaîne de TCHARs ?
    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.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel Voir le message
    http://cpp.developpez.com/faq/cpp/?p...am_hexa_to_int


    Pour convertir en "TCHAR", il te faut un tableau de TCHAR pour stocker le resultat. Les CString des MFC ont tout ce qu'il faut pour cela (=> FAQ VC++).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR> > tstring;
    Pour créer un type proche de CString nommé tstring.

    Personnellement, j'utilise un petit fichier header (en PJ). Bien évidemment, le tout n'a été testé que sous Windows avec VC++, mais les adaptations à faire pour le compiler avec d'autres systèmes sont mineures (d'après moi).
    Fichiers attachés Fichiers attachés
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Ce header m'a l'air sympa, mais j'ai deux remarques:
    • Il me semble que les defines de TEXT() et _T() nécessitent de passer par une macro intermédiaire, pour certains cas de figures.
    • Ton utilisation de wcstombs() n'est pas safe, car un caractère wchar_t peut se résoudre en deux char. Au lieu de arg.length(), tu dois réserver wcstombs(NULL, arg.c_str(), arg.length()) caractères†. D'ailleurs, je le ferais aussi pour les conversions dans l'autre sens...
      †en plus du terminal, que le constructeur de string ajoute automatiquement.
    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.

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Une variante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::basic_string<TCHAR> string_t;
    J'avais opte pour string_t au lieu de "tstring" parce que applique aux flux comme ostream, ca fait "tostream" -> "to stream"...

  9. #9
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ce header m'a l'air sympa, mais j'ai deux remarques:
    • Il me semble que les defines de TEXT() et _T() nécessitent de passer par une macro intermédiaire, pour certains cas de figures.
    Je ne vois pas. Soit ces macros sont définies et je ne les redéfini pas, soit elles ne le sont pas et je les déclare. Ensuite, leur définition dépends de l'existence de la définition de UNICODE, qui est définit (ou non) par Visual C++ (parce que utilisé dans windows.h à outrance).
    Citation Envoyé par Médinoc Voir le message
    • Ton utilisation de wcstombs() n'est pas safe, car un caractère wchar_t peut se résoudre en deux char. Au lieu de arg.length(), tu dois réserver wcstombs(NULL, arg.c_str(), arg.length()) caractères†. D'ailleurs, je le ferais aussi pour les conversions dans l'autre sens...
      †en plus du terminal, que le constructeur de string ajoute automatiquement.
    C'est effectivement une méthode bien meilleure. A ma décharge, je n'ai pas touché à ce fichier depuis des années, et je m'en sers peu (je fais directement tout en wstring maintenant). La question qui s'était posé à l'époque provenait de notre gestion des langues dans une application bien particulière (japonais en MBCS et russe en unicode, dans la même application).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Je ne vois pas. Soit ces macros sont définies et je ne les redéfini pas, soit elles ne le sont pas et je les déclare. Ensuite, leur définition dépends de l'existence de la définition de UNICODE, qui est définit (ou non).
    Ce que je voulais dire, c'est que leur définition par défaut utilise ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifdef _UNICODE
    #define __T(x) L ## x
    #else
    #define __T(x) x
    #endif
    #define _T(x) __T(x)
    #define TEXT(x) __T(x)
    Alors que toi, tu ne passes pas par une macro intermédiaire. Et il me semble que ça fait une différence, notamment si tu fais TEXT(UNE_MACRO). Donc, je pense que tu devrais faire la même chose que Microsoft si tu veux être sûr de ne rien perturber...
    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.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    Désolé, j'avais oublié de revenir surveiller ce sujet.

    Merci pour votre aide

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

Discussions similaires

  1. Transformer (int année, int mois, int jour) en millisecondes
    Par Logic_613 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/04/2012, 11h08
  2. [C#] Conversion string to int
    Par OpenGG dans le forum C#
    Réponses: 2
    Dernier message: 23/08/2006, 19h08
  3. Problème de conversion string->int
    Par seheiahs dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 10h42
  4. conversion string vers int
    Par mathher dans le forum C++
    Réponses: 4
    Dernier message: 14/04/2006, 17h52
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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