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

Arduino Discussion :

Connaitre la longueur d'une chaine dans un uint8_t


Sujet :

Arduino

  1. #1
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut Connaitre la longueur d'une chaine dans un uint8_t
    Bonjour,

    Je cherche à connaître la longueur d'une chaine saisie, situé dans une variable uint8_t. Quand je compile, j'ai une belle erreur de conversion (et je cherche à améliorer ce bout de code).

    Dans ma classe, j'ai déclaré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class LcdMidasI2c
    {
    	public:
    		void printLCD(uint8_t *TEXT);
    };
     
    void LcdMidasI2c::printLCD(uint8_t *TEXT)
    {
    	int lengthText = sizeof(&TEXT);
    }
    Ce que le compilateur me répond:
    warning: invalid conversion from 'const char*' to 'uint8_t* {aka unsigned char*}' [-fpermissive]
    C'est normal, car j'ai pas su faire mieux et mes recherches n'ont pas abouti.

    Ma question est : "Serait-il possible de convertir le text en char, connaitre le nombre de caractère et ne pas modifier le contenu de l'uint8_t ?".

    Merci

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    La réponse est strlen(). C'est une question simple de gestion de chaines de caractères en C, je te conseille d'aller lire quelques tuto sur ce sujet. C'est un des sujets les plus pénibles du C, normal que tu bûches dessus.

    Question subsidiaire : pourquoi utiliser un uint8_t* au lieu d'un const char* dans ta déclaration de fonction ?

  3. #3
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Il y a plein de raisons qui me pousse à utiliser de l'uint8_t. La principale est que ma classe soient proche de celle qui existe déjà tout en implémentant des éléments qui sont en adéquation avec mon HARDWARE.

    Cependant, j'ai fais ma petite enquête. Les autres bibliothèques du genre s'appuient sur une autre librairie : Print.h et Print.CPP qu'ils reprennent pour leurs compte. J'ai compris aussi que la conversion se faisait par print("") qui s'appuie sur write au travers de using Print::write;

    Ce qui donnerais normalmeent, chez moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <inttypes.h>
    #include "Print.h"
     
    class LcdMidasI2c : public Print
    {
    	public:
    		LcdMidasI2c();
    		using Print::write;
    	private:
    };
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include "LcdMidasI2C.h"
     
    #include <Wire.h>
     
    #include <stdio.h>
    #include <string.h>
    #include <inttypes.h>
     
    LcdMidasI2c::LcdMidasI2c()
    {
    }
    Et dans la partie principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void setup () {
      //Ici j'appelle des fonctions qui compile parfaitement, je ne les ai pas représenté dans la classe (c'est plus simple à lire)
      Serial.begin(9600);
      lcd.begin(0x3C, 16, 2); //Adresse I2C, Colonnes, Lignes
      lcd.setCursor(0,0); //Colonne, Ligne
      lcd.print("F4HYU");
    }
    t bien sûr ça plante :
    error: cannot declare variable 'lcd' to be of abstract type 'LcdMidasI2c'

    LcdMidasI2c lcd;
    Là, c'est clair il ne sais pas comment compiler, il est perdu !

    J'aimerais y voir plus clair la dessus et éventuellement me servir de cette surcharge, si c'est possible.

    Merci

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    L'héritage à tout va, c'est mal.

    Pourquoi ne pas juste définir ta fonction et appeler write() à l'intérieur de cette fonction ?

Discussions similaires

  1. [LibreOffice] Connaitre la longueur d une chaine
    Par ryan44x dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 19/06/2015, 17h00
  2. changement de longueur d'une chaine dans requête UNION ?
    Par kikidrome dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/12/2008, 10h57
  3. connaitre la longueur d'une chaine
    Par befast dans le forum C++
    Réponses: 2
    Dernier message: 25/09/2007, 14h53
  4. [VBA-E] Limitation de la longueur d'une chaine dans Shapes
    Par padre03 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 07/12/2006, 00h52
  5. Réponses: 2
    Dernier message: 10/07/2002, 11h51

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