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 :

convertir string en unsigned char


Sujet :

C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 834
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 834
    Points : 991
    Points
    991
    Par défaut convertir string en unsigned char
    Bonjour,

    Je voudrais convertir une chaine de caractère en un unsigned char.
    Au départ j’étais parti sur l'utilisation de la fonction atoi() mais le problème est qu'en cas d'erreur cette fonction renvoi la valeur 0. Donc comment faire pour différencier une réelle erreur et la chaine "0" qui n'est pas une erreur ?

    merci d'avance,

  2. #2
    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
    Voir la fonction strtoul()

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 834
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 834
    Points : 991
    Points
    991
    Par défaut
    merci c'est parfait

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Iran

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 40
    Points
    40
    Par défaut
    atoi() ne détecte pas d'erreurs

    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
    16
    17
     
    errno = 0;
    long val = strtol(nptr, (char **) NULL, 10);
    if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
        || (errno != 0 && val == 0))
    {
                   perror("strtol");
                   exit(EXIT_FAILURE);
    }
     
    if (endptr == str)
    {
                   fprintf(stderr, "aucun chiffre ont été trouvés\n");
                   exit(EXIT_FAILURE);
    }
     
    /* si on arrive ici strtol est réussi */

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 834
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 834
    Points : 991
    Points
    991
    Par défaut
    Citation Envoyé par arash Voir le message
    atoi() ne détecte pas d'erreurs

    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
    16
    17
     
    errno = 0;
    long val = strtol(nptr, (char **) NULL, 10);
    if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
        || (errno != 0 && val == 0))
    {
                   perror("strtol");
                   exit(EXIT_FAILURE);
    }
     
    if (endptr == str)
    {
                   fprintf(stderr, "aucun chiffre ont été trouvés\n");
                   exit(EXIT_FAILURE);
    }
     
    /* si on arrive ici strtol est réussi */

    il y a des erreur dans ton code. ça marche pas si on fait tout simplement ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    errno = 0;
    long val = strtol(str, (char **) NULL, 10);
    if (errno){
          perror("erreur sur strtol");
          exit(EXIT_FAILURE);
    }
    // => si on arrive ici, c'est que la conversion c'est faite correctement

    Sinon cette methode ne fonctionne pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    long val;
    char *ptrEnd;
    char *str;
     
    val = strtol(str, &ptrEnd, 10);
     
    if (ptrEnd == NULL || *ptrEnd != '\0'){
          perror("erreur sur strtol");
          exit(EXIT_FAILURE);
    }
     
    // => si on arrive ici, c'est que la conversion c'est faite correctement

  6. #6
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonsoir,

    La fonction sscanf peut aussi très bien faire l'affaire. Il faut comme toute fonction faire attention au retour.
    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
    16
        char *strValeur = "25" ;  // Essayer avec <0 ou >255 ou avec des caractères non numérique
        unsigned char uvaleur = 0 ;
     
        int valeur ;     // Pour sscanf
     
        /* 
           Si 1. strValeur <> NULL
              2. sscanf(...) a trouvé un élément
              3. La valeur trouvée est bornée sur un unsigned char
        */
        if(strValeur && sscanf(strValeur, "%d", &valeur)>0 && valeur>=0 && valeur<=0xFF) {
            uvaleur = (unsigned char)valeur ;
            printf("Valeur trouvée = %d\n", uvaleur) ;
        }
        else
            printf("Aucun nombre a été trouvé.\n") ;

Discussions similaires

  1. Conversion string en unsigned char *
    Par abdallah2007 dans le forum Langage
    Réponses: 4
    Dernier message: 19/05/2009, 14h51
  2. Convertir StringStream en unsigned char
    Par kalikut dans le forum Débuter
    Réponses: 2
    Dernier message: 31/10/2008, 08h45
  3. Convertir un const unsigned char * à string
    Par anas.eh dans le forum C++
    Réponses: 4
    Dernier message: 04/08/2008, 22h40
  4. Convertir String^ en const char*
    Par Sixdeux dans le forum C++/CLI
    Réponses: 3
    Dernier message: 22/05/2007, 09h58
  5. Convertir String en Char: comment?
    Par nmathon dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2005, 20h58

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