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 un char * en unsigned char []


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 42
    Par défaut convertir un char * en unsigned char []
    comment je peux convertir un char * en unsigned char [] ???
    en faite je veux convertir une adresse MAC
    char * mac="00:11:22:33:44:55"
    en
    unsigned char Mac [6];

    en recupurant chaque partie entre ":" dans un "unsined char Mac [i]" dans le format unsigned char.
    et Merci

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Tu peux soit utiliser la fonction strtok() mais celle ci modifie ta chaîne.
    Tu peux aussi utiliser les fonctionnalités de scanf, exemple pour une chaîne de longueur quelconque avec un délimiteur et 6 données, tu peux essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char* pos=mac;
    int k,nb,compteur;
     
    for(k=0;k<6;k++)
    {
         sscanf(pos,"%d%*%n",&nb,&c,&compteur);
         pos+=compteur;
         Mac[k]=nb;
    }
    (code non testé)

  3. #3
    Expert confirmé
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sscanf(pos,"%d%*%n",&nb,&c,&compteur);
    ce sscanf() est incorrect :
    - Le format %* est incorrect. On doit avoir %c (à cause du champ &c)
    - De toute façon, il n'est pas possible d'utiliser un format %*... avec un %n, le comportement serait alors indéfini pour le champ %n.

    On peut aussi avoir plus simplement dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(pos,"%d:%n",&nb,&compteur);

  4. #4
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Oui effectivement j'avais modifié le scanf() en changeant un "%c" en "%*" et oublié d'enlever le "&c"
    Merci pour la précision au sujet du "%*", j'ignorais qu'il n'était pas pris en compte dans le "%n"

  5. #5
    Membre averti
    Inscrit en
    Février 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 42
    Par défaut
    Merci pour vos réponse
    j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    char *mac = "00:15:05:f0:33:f8";
    unsigned char arEther[6];
    char * pos=mac;
    int nb, compteur;
     
    for (i=0;i<6;i++)
    {
         sscanf(pos,"%d:%n",&nb,&compteur);
         pos+=compteur;
         arEther[i]=nb;
    }
     
    printf("  arEther: %02x:%02x:%02x:%02x:%02x:%02x\n", arEther[0], arEther[1],arEther[2],arEther[3], arEther[4], arEther[5]);
    J'ai obtenue le resultat suivant :
    mac = 00:15:05:f0:33:f8
    arEther: 00:0f:05:05:21:21

    => mac n'est pas bien converti en unsigned char arEther [i] ?!

  6. #6
    Expert confirmé
    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
    Par défaut
    Si la chaine mac est codée en hexadécimal, le format %d ne convient pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(pos,"%x:%n",&nb,&compteur);

Discussions similaires

  1. convertir un int en unsigned char[]
    Par info21 dans le forum C++
    Réponses: 11
    Dernier message: 02/04/2010, 15h30
  2. [Clé de registre] Conversion char* vers unsigned char*
    Par The Lord of Nesquik dans le forum C
    Réponses: 7
    Dernier message: 03/07/2006, 23h30
  3. Types : char vs. unsigned char
    Par Herode dans le forum C++
    Réponses: 3
    Dernier message: 15/02/2006, 21h39
  4. vector<unsigned char> et unsigned char* : conversion ?
    Par zax-tfh dans le forum SL & STL
    Réponses: 5
    Dernier message: 15/01/2006, 10h43
  5. char et unsigned char
    Par jobherzt dans le forum C++
    Réponses: 8
    Dernier message: 11/02/2005, 00h24

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