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 entier en char*


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 46
    Points : 28
    Points
    28
    Par défaut Conversion d'un entier en char*
    salut

    je cherche desesperement un moyen de convertir un int en char*

    J'ai essayé la fonction itoa mais mon compilateur ne la reconnait pas.

    J'ai essayé la FAQ en utilisant
    int num=1;
    char * a = reinterpret_cast<char*>(num);

    mais j'ai une segmentation fault.

    aidez moi s'il vous plait je ne sais plus quoi faire

    merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 70
    Points
    70
    Par défaut
    Bonjour

    Essaie avec i/ostringstream, ça devrait marcher.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 180
    Points : 86
    Points
    86
    Par défaut
    je ne comprends pas ce que tu veu faire??

    un char* n'est pas un char!!

    et un int* n'est pas un int!!

    quand tu veux convertir un int en pointeur de char, tu veux que le pointeur ait l adresse du int??

    si c est le cas essaye ca!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include<iostream>
    using namespace std;
     
    int main()
    {
    	int a=65;
    	char b = (char)a;
    	char* c=&b;
    	cout<<*c<<endl;
    	return 0;
    }

  4. #4
    Membre régulier Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Points : 115
    Points
    115
    Par défaut
    salut:
    si tu veu la chaine de caractere correspondant a un int essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <sstream>
     
    ..
    int n=10;
    std::ostringstream oss;
    oss<<n;
    const char* c= oss.str().c_str();
    ça te donne une chaine de caractere a partir d'un int ( ou de ce que tu envoi dans oss )
    apres pourquoi utilise un char* et non un std::string?

    [ EDIT]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <iostream>
    #include <sstream>
    #include <string>
     
     
    int main(int argc, char** argv)
    {
        int a = 10;
        std::ostringstream oss;
        oss << a;
        std::string chaine = oss.str();
        std::cout<<chaine<<std::endl;
     
        return 0;
    }
    [/EDIT]

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 180
    Points : 86
    Points
    86
    Par défaut
    donne stp un exemple complet qui marche!!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Merci à tous

    Si j'utilise des char* c'est pour ouvrir des fichiers la méthode open n'accepte que des char*

    Comme je crée automatique mes noms de fichiers j'avais besoins de transformer un int en char*.

    ostringstream fonctionne bien

    pour la mettre en char *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char* c= oss.str().data();
    mais c'est pareil que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char* c= oss.str().c_str();
    Merci à tous

  7. #7
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    La faq : data ne garentit pas le renvoi du \0 finale de la chaine de caractère!

  8. #8
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    C'est étrange qu'avec reinterprete_cast<> il y ai une erreur....
    car si par exemple l'int stocke l'adresse mémoire vers un char....
    (ça peut arriver avec le l'assembleur)
    alors il faut réussir à transformer cet int en char*, et ça ne devrait pas planter.... Etrange.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 588
    Points
    41 588
    Par défaut
    Ben, c'est normal qu'il y ait une erreur...

    avec ce reinterpret_cast, on ordonne au programme de lire une chaîne imaginaire à l'adresse 1 --> Erreur.


    Pour convertir un nombre en chaîne, la solution a été donnée par Blowih...

  10. #10
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par Médinoc
    Ben, c'est normal qu'il y ait une erreur...

    avec ce reinterpret_cast, on ordonne au programme de lire une chaîne imaginaire à l'adresse 1 --> Erreur.
    Ben non je ne vois pas pourquoi il lirai à l'adresse 1 ???
    Un char* c'est un pointeur sur un char.
    donc si on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char A = 'A';
    char* pA = &A;
    Il n'y a pas d'erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char A = 'A';
    int pA = reinterpret_cast<int>(&A);
    char* pA_2 = &A;
    char* pA_1 = reinterpret_cast<char*>(pA);
    ben normalement pA_1 et pA_2 sont égaux, et il n'y a pas d'erreur...

  11. #11
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Il ne faut pas faire l'amalgamme char* = chaine de caractère.
    Ca marche aussi avec des objets...
    le fameux int peut stocker l'adresse d'une class :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A
    {
        int i;
    };
    A* ClassA = new A;
    int pA = reinterpret_cast<int>(ClassA);
    Je suis d'accord que le c'est du gros bourinage le reinterpret_cast.
    Mais certaines fonctions retournent un int qui contient l'adresse mémoire d'un objet en mémoire, la seule façon de le récupérer c'est le reinterpret_cast...
    (on ne s'en sert pas tous les jours, je suis d'accord )

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Citation Envoyé par Rafy
    Mais certaines fonctions retournent un int qui contient l'adresse mémoire d'un objet en mémoire, la seule façon de le récupérer c'est le reinterpret_cast...
    Et la marmotte...

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 588
    Points
    41 588
    Par défaut
    Citation Envoyé par Rafy
    Citation Envoyé par Médinoc
    Ben, c'est normal qu'il y ait une erreur...

    avec ce reinterpret_cast, on ordonne au programme de lire une chaîne imaginaire à l'adresse 1 --> Erreur.
    Ben non je ne vois pas pourquoi il lirai à l'adresse 1 ???
    Un char* c'est un pointeur sur un char.
    Je parlais de ce fragment de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int num=1;
    char * a = reinterpret_cast<char*>(num);
    Ici, c'est directement un int (pas son adresse) qu'on essaie de convertir en pointeur...



    Citation Envoyé par VoidSeer
    Citation Envoyé par Rafy
    Mais certaines fonctions retournent un int qui contient l'adresse mémoire d'un objet en mémoire, la seule façon de le récupérer c'est le reinterpret_cast...
    Et la marmotte...
    Tu as déjà programmé en Win32 ?
    Dans ce cas, je te conseillerais de jeter un oeil aux types WPARAM, LPARAM, LRESULT, UINT_PTR, LONG_PTR et aux fonctions WindowProc(), DialogProc(), EnumWindows(), EnumWindowProc(), etc.
    Mais bien entendu, elles utilisent des typedefs particuliers qui s'assurent qu'un pointeur peut effectivement être stocké dans ces types: Elles ne vont pas utiliser directement des int...

  14. #14
    Expert éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Langly
    pour la mettre en char *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char* c= oss.str().data();
    mais c'est pareil que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char* c= oss.str().c_str();
    attention à ton exemple, le char* n'est valide que pendant la durée de vie de la string récupérée. Or là oss.str() te renvoie un objet temporaire, qui est détruit à la ligne suivante. Donc c pointe vers une chaine détruite.
    http://c.developpez.com/faq/cpp/?pag...ion_c_str_data

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Citation Envoyé par Médinoc
    Tu as déjà programmé en Win32 ?
    Oui, mais j'évite d'étaler ma science

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 588
    Points
    41 588
    Par défaut
    Vive la marmotte dans ce cas...

    Il y a une différence entre étaler sa science et répondre à une affirmation de type "non, cela n'arrive jamais"...

Discussions similaires

  1. Conversion d'un entier en char
    Par altaruk dans le forum Débuter
    Réponses: 16
    Dernier message: 07/12/2009, 19h14
  2. Conversion d'un entier en caractères
    Par Tcheby dans le forum Langage
    Réponses: 6
    Dernier message: 18/11/2005, 09h41
  3. convertir tableau d'entier en char[]
    Par nin47 dans le forum C
    Réponses: 20
    Dernier message: 12/10/2005, 21h03
  4. conversion d'un entier en ASCII
    Par bischof dans le forum Langage
    Réponses: 6
    Dernier message: 08/07/2005, 14h18
  5. Conversion d'une chaine de char en numerique
    Par simone.51 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 25/03/2004, 17h47

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