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 des char en int


Sujet :

C++

  1. #1
    Membre �clair�
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par d�faut Convertir des char en int
    Bonjour � tous
    j'ai cr�� une structure ainsi:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct {
      char com;
      char nEquip;
      char manip;
      char param;
      char nCapt;
      char sens;
      int16_t val;
    }manCapt;
    La structure est charg�e par un tableau de caract�res:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
          manCapt.com=com[1];
          manCapt.nEquip=com[2];
          manCapt.manip=com[3];
          manCapt.param=com[4];
          manCapt.nCapt=com[5];
          manCapt.sens=com[6];
          manCapt.val=ci(com[7])*1000 + ci(com[8])*100 + ci(com[9])*10 + ci(com[10]);
    ci est une fonction de conversion char->d�cimal.
    Mon probl�me: cela fonctionne si j'ai bien un chiffre de 4 caract�res mais si j'ai un chiffre � 1, 2 ou 3 caract�res cela ne va plus.
    Y a-t'il un moyen �l�gant de r�gler cela?

  2. #2
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    �a manque quelques informations ? si tu as 1, 2 ou 3 caract�res, ils sont dispos� comment dans ton tableau com ?
    Ce tableau de caract�re (com) a t'il un caract�re nul en derni�re position ? exemple, si il y a trois caract�re a partir de com[7], qui y a t'il en com[10] ?
    Bref, postes un exemple de ce tableau (com) �a sera plus simple.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  3. #3
    Membre �clair�
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par d�faut
    Merci pour tes questions.
    Le tableau com est form� � partir d'une saisie clavier. Exemple pour les 6 premiers caract�res: B 2 D 1 5 + puis de 1 � 4 caract�res qui sont les chiffres d'un nombre de 1 � 9999.
    Le tableau se termine apr�s la saisie par un caract�res NUL, c'est � dire que com[] peut comporter de 8 � 11 caract�res (avec le '\0').

    Pour la petite histoire, mais je pense que �a n'a pas d'int�r�ts ici, le code cit� en exemple signifie:
    B:Commande relais de la base; 2: relais n�2; D:delai de fermeture; 1: 10 secondes; 5: capteur N�5; +: en progression positive; xxxx: valeur de d�clenchement.
    C'est � dire qu'avec cette commande je vais d�clencher une relais � partir de la lecture de la valeur d'un capteur.

    Je sais que la solution serait peut-�tre d'entrer par exemple 0005 ou 0025 ou 0560, il faudrait que je controle le nombre de caract�res entr�s?

  4. #4
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    Comme tu utilises un tableau C, et vu que ton nombre est suivi d'un caract�re nul, tu pourrais utiliser la fonction atoi � partir du premier caract�re du nombre. ex :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
        char tab[] = {'?', '?', '?', '1', '2', '3', '\0'};
        int16_t val = atoi(&tab[3]);
    ou stoi, comme tu es en C++
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
        char tab[] = {'?', '?', '?', '1', '2', '3', '\0'};
        int16_t val = std::stoi(&tab[3]);
    PS : Les indices des tableaux vont de 0 � N-1 or je vois que tu commence par l'indice 1 ? Est-ce volontaire ?
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  5. #5
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par mormic Voir le message
    Le tableau com est form� � partir d'une saisie clavier. Exemple pour les 6 premiers caract�res: B 2 D 1 5 + puis de 1 � 4 caract�res qui sont les chiffres d'un nombre de 1 � 9999.
    Le tableau se termine apr�s la saisie par un caract�res NUL, c'est � dire que com[] peut comporter de 8 � 11 caract�res (avec le '\0').
    En mode bourrin (faire 1 boucle)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        manCapt.val = (com[7] - '0');
     
        if (com[8] != '\0') {
            manCapt.val = ((manCapt.val * 10) + (com[8] - '0'));
     
            if (com[9] != '\0') {
                manCapt.val = ((manCapt.val * 10) + (com[9] - '0'));
     
                if (com[10] != '\0') {
                    manCapt.val = ((manCapt.val * 10) + (com[10] - '0'));
                }
            }
        }

  6. #6
    Membre �clair�
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par d�faut
    En mode bourrin
    Oui j'avais envisag� cette m�thode, mais comme ta d�finition l'indique, ce n'est pas �l�gant.
    Merci tout de m�me.

    je vois que tu commences par l'indice 1 ? Est-ce volontaire ?
    Oui car le premier caract�re est utilis� dans un 'case' pour indiquer la manip � faire. (700B2D15+1942 : le 7 est le code de la manip, 00 est l'adresse de stockage en m�moire SPIFFS pour un ESP32)

    Je viens d'utiliser std::stoi(com[9] et cela fonctionne comme voulu; j'obtiens 1942 et si je mets 36, j'obtiens bien 36.
    Merci bien pour cette aide.

  7. #7
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par mormic Voir le message
    Je viens d'utiliser std::stoi(com[9] et cela fonctionne comme voulu; j'obtiens 1942 et si je mets 36, j'obtiens bien 36.
    Merci bien pour cette aide.
    atoi a �t� d�pr�ci�e au profit de strtol



    C'est 1 documentation C++ : par exemple 1 biblioth�que XXX.h en C devient cXXX en C++. Par exemple, stdlib.h/cstdlib stdio.h/cstdio

  8. #8
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    Citation Envoy� par foetus Voir le message
    atoi a �t� d�pr�ci�e au profit de strtol
    D�pr�ci�e par qui ?
    Elle est toujours d�crite dans la norme, m�me la C23. (pas de mention de d�pr�ciation).
    sur : https://en.cppreference.com/w/c/string/byte/atoi ils ne disent rien non plus.

    PS : C'est std::stoi qu'il a utilis�.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  9. #9
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par CGi Voir le message
    D�pr�ci�e par qui ?
    Je te r�ponds juste pour te r�pondre

    std::atoi, std::atol, std::atoll, documentation cppreference.com en anglais
    Actual C++ library implementations fall back to C library implementations of atoi, atoil, and atoll, which either implement it directly (as in MUSL libc) or delegate to strtol/strtoll (as in GNU libc).
    Donc effectivement les fonctions C ne sont pas d�pr�ci�es et elles sont encore pr�sentes "tel quel", mais 1 bonne partie des Linux, dans la librairie standard (std::atoX), utilise par d�faut strtol/strtoll.
    Apr�s, on est ici dans les forums C++ pas C

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. convertir un char en int
    Par boby666 dans le forum C
    R�ponses: 4
    Dernier message: 30/12/2007, 11h08
  2. Convertir un char en int
    Par Panam�en dans le forum C
    R�ponses: 8
    Dernier message: 30/12/2007, 10h14
  3. [(cast)] convertir un char en int...
    Par APoLLoN1234 dans le forum C++
    R�ponses: 12
    Dernier message: 15/03/2006, 23h15
  4. convertir un char en int / et prob d'espace
    Par yanchasp dans le forum C++
    R�ponses: 20
    Dernier message: 07/02/2006, 19h17
  5. [Conversion]Convertir un char[] en int
    Par ThanosT dans le forum G�n�ral Java
    R�ponses: 10
    Dernier message: 11/11/2005, 12h23

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