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 :

Comment convertir un array en byte


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 163
    Par défaut Comment convertir un array en byte
    Bonjour,

    Je charhe a convertir un array en byte.

    mon array (char) est la suivante

    dird3
    Pour etre complet, je dois séparé le 3 de dird.
    Je le fais comme ca
    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
     
    if(!strncmp(inSerial,"dird",3)){
          #ifdef DEBUG
            Serial.println(F("DELETE IN THE PHONE DIRECTORY"));
            Serial.println(F("--------------------------------"));
            Serial.println(F("In progress, wait..."));
          #endif
     
           // Ici j'affiche le trois
           Serial.println(inSerial[4]);
     
          //En suite j'ai besoin de ce trois pour une fonction
          gsm.DelPhoneNumber(inSerial[4]);
     
    // Il devrait effacer le numero qui se trouve a la position 3
     
    }
    Il devrait effacer le numero qui se trouve a la position 3, simplement ca ne marche pas.
    Si je fais ca, ca marche
    Le truc c'est que la fonction gsm.DelPhoneNumber(byte position);
    attend un byte dont voici un extrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char GSM::DelPhoneNumber(byte position)
    {
      char ret_val = -1;
     
      if (position == 0) return (-3);
      if (CLS_FREE != GetCommLineStatus()) return (ret_val);
      SetCommLineStatus(CLS_ATCMD);
      ret_val = 0; // phone number was not written yet
    Donc si j'ai bien compris je dois transformé la valeur de inSerial[4] (3) pour l'avoir en byte, mais qi doit toujours etre trois, forcément.

    Et la je ne sais pas comment faire. J'ai essayé ceci
    byte tot = (byte)inSerial[4];

    Mais sans succes.

    Comment puis je faire pour que 'position' de ma fonction DelPhoneNumber() recupère le bon numero??

    Milles mercis

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    DelPhoneNumber() attend une position, et tu lui envoies un caractère.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 163
    Par défaut
    J'ai trouvé comment comnvertir un char en array, mais uniquement pour un caractere

    Par exemple j'ai dir4 (char) et le veux en byte, je fais comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Je prend le caractere a la 4eme position
    (byte)(inSerial[4] - '0')
    Maintenant si j'ai ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char caract[3];
    caract="234"
    Comment puis-je converti 234 en byte, car là, je ne peux plus me limiter sur un caracter vu que j'en ai 3 pour faire 234?

    Mercis

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 163
    Par défaut
    ho mais oui, mais j'ai besoin d'un byte pas d'un int.

    Es-ce que c'est aussi valable pour un byte?

  6. #6
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    j'ai relu plusieurs fois ce sujet depuis plusieurs jours, et j'ai vraiment l'impression que tu ne sais pas ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char GSM::DelPhoneNumber(byte position)
    N'attend pas un byte, c'est anecdotique ça, il attend une position, comme son nom l'indique. Qui est l'index du caractère à effacer (je suppose, vu le nom) dans la chaîne. Pour une fois que les méthodes semblent claires, c'est bien dommage de ne pas en tenir compte..
    Et que je serais pas surpris que pour "effacer le 4° caractère" il suffise de faire un DelPhoneNumber(4);, ou peut-être 5.


    Enfin, "transformer" en byte, ou en quoi que ce soit, ça me fait directement penser à ni plus ni moins qu'un reinterpret_cast.
    Mais bon, tu as déjà un char*, alors je vois pas trop en quoi tu voudrais le cast.. en général c'est du cast vers char* justement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* str = "dird3";
    str[4] = 0;
    et voilà, il n'y a plus de "3" en fin de chaîne..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* str = "dird3";
    str[3] = 0;
    et voilà, il n'y a plus de "3" en fin de chaîne..
    Il va plutôt y avoir "dir03" non?

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Citation Envoyé par Bysbobo Voir le message
    Il va plutôt y avoir "dir03" non?
    Non, un byte nul ne code pas le chiffre 0, mais la fin de chaîne de caractères...
    Pour représenter le chiffre 0 il faut mettre le code ASCII du caractère '0', qui est 48 en décimal (généralement on le note en hexadécimal comme suit: 0x30)

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Ceci dit, le 3 étant le 5ème caractère de la chaîne, si on ne veut effacer que lui, il me semble qu'il faudrait mettre le NULL (valeur 0) à l'indice 4 (4 parce que le premier caractère porte l'indice 0).

  11. #11
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Avant, j'avais un cerveau. mais ça c'était avant...

    Alors sur ce site de table ASCII
    003 : ETX : End of Text

    je comprends pourquoi c'est le dernier caractère! OK

    Ce que je comprends moins c'est que char *str est (et là j'ai peur de dire une bétise) considéré comme un tableau de char (ouille?).
    Donc, si j'ai pas loupé un épisode, l'indice est un entier mais pas un ASCII

    De même pour ton dernier post, pas compris la logique

    Désolé de poser des questions sur des sujets que je n'ai pas ouvert mais j'essaye de comprendre ^^

Discussions similaires

  1. Comment convertir un tableau de byte en un float ?
    Par alex140025 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 03/08/2011, 18h53
  2. Réponses: 5
    Dernier message: 18/11/2005, 22h11

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