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 :

problème de conversion


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut problème de conversion
    Bonjour,

    J'ai un problème avec la conversion d'une valeurs récupérés dans une string en une valeur de type "int".
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    char delimiter[] = "\n";
    char *l_data;
    char l_bufferTemp[] = "7D\n");
    int l_valeur = 0;
     
    l_data = strtok( l_bufferTemp, delimiter );
    printf( "l_data: %s\n", l_data );
     
     
    l_valeur  = atoi(l_data);
    printf( "valeur: %i\n", l_valeur );
    Le problème est que je lis bien la valeur "7F" dans mon premier "printf" mais après la conversion je ne recupère que la valeur "7" dans mon deuxième printf.

    Quel est le problème?

    Je vous remercie.

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Un problème de base: http://www.opengroup.org/onlinepubs/...ns/strtol.html.
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    merci,
    j'ai essayer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    l_data = "7D";
    char *stop_string;
    int l_dataLabel = strtol( l_data, &stop_string, 10);
    printf("data: %i\n", l_dataLabel );
    dans mon printf, je ne recupère uniquement que la valeur 7;

    De plus j'utilisais strtok comme ma string ne contient pas uniquement la valeur "7D" mais aussi d'autre paramètre à récupérer.
    La string réel: "0,140;242;11;7D;1"
    Je récupère bien les autres valeurs mais pas celle ci.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totoscill Voir le message
    merci,
    j'ai essayer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    l_data = "7D";
    char *stop_string;
    int l_dataLabel = strtol( l_data, &stop_string, 10);
    printf("data: %i\n", l_dataLabel );
    dans mon printf, je ne recupère uniquement que la valeur 7;

    De plus j'utilisais strtok comme ma string ne contient pas uniquement la valeur "7D" mais aussi d'autre paramètre à récupérer.
    La string réel: "0,140;242;11;7D;1"
    Je récupère bien les autres valeurs mais pas celle ci.

    le "x" dans le format de lecture (ou d'écriture) indique de l'hexa.. Sans le x, on pense que c'est un entier normal...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    le "x" dans le format de lecture (ou d'écriture) indique de l'hexa.. Sans le x, on pense que c'est un entier normal...
    C'est vrai, mais même en faisant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char string[] = "0x7D"
    int l_data = atoi(string);
    printf("l_data: 0x%x\n", l_data);
    ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    char string[] = "0x7D"
    char *l_end_ptr;
    int l_data = strtol(string, &l_end_ptr, 10);
    printf("l_data: 0x%x\n", l_data);
    Je récupère la valeur 0.

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    A mon avis, c'est la fonction itoa qui est en cause. Je ne sais pas exectment, mais je pense que cette fonction ne gere que les decimaux, et non les hexadecimaux ...
    En premier lieu, il va falloir determiné si la fonctionitoa prend en compte les hexa, et si oui, de quelle maniere ...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    A mon avis, c'est la fonction itoa qui est en cause. Je ne sais pas exectment, mais je pense que cette fonction ne gere que les decimaux, et non les hexadecimaux ...
    En premier lieu, il va falloir determiné si la fonctionitoa prend en compte les hexa, et si oui, de quelle maniere ...
    oui, j ai bien l'impression aussi que cette fonction atoi (et non itoa) ne prend que les décimaux.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totoscill Voir le message
    oui, j ai bien l'impression aussi que cette fonction atoi (et non itoa) ne prend que les décimaux.
    sscanf avec le bon format devrait marcher....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Si on veux convertir de l'hexadécimal, il faut spécifier la base 16 :

    int l_data = strtol(string, &l_end_ptr, 16);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    sscanf avec le bon format devrait marcher....
    ca à l'air d'être bon. Merci.

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

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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