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 :

Formater une string en tableau de byte


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut Formater une string en tableau de byte
    Bonjour a tous,

    j'ai un petit probleme de format et comme d'habitude je lutte pour une betise !

    je recois un char * representant un tableau de byte
    du style : char* id;

    id="88047fb5"
    et j'aimerai transformer cette chaine en un vrai tableau de byte
    uint8_t *id;
    id[0]=88;
    id[1]=04;

    mais je lutte car a chaque fois que j'essaye une idee je me retrouve avec le code ascii du char "88" et non pas le byte 88.

    est ce que quelqu'un a compris ? et est ce que quelqu'un peut me donner une petite idee ?

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Et bien recopie les deux premiers bytes dans une chaînes avec un 0 en 3ème position, e(t fait pareil avec les deux suivants style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    uint8_t id[2]; // sinon il faut faire un malloc
    char tmp1[3];
    char tmp2[3];
    Id="88047fb5";
    strncpy(tmp1, ID, 2);
    strncpy(tmp2, ID+2, 2);
    tmp1[2] = tmp2[2] = 0;
    id[0]=strtol(tmp1, NULL, 10);
    id[1]=strtol(tmp2,NULL, 10);

  3. #3
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Trap D
    Et bien recopie les deux premiers bytes dans une chaînes avec un 0 en 3ème position, e(t fait pareil avec les deux suivants style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    uint8_t id[2]; // sinon il faut faire un malloc
    char tmp1[3];
    char tmp2[3];
    Id="88047fb5";
    strncpy(tmp1, ID, 2);
    strncpy(tmp2, ID+2, 2);
    tmp1[2] = tmp2[2] = 0;
    id[0]=strtol(tmp1, NULL, 10);
    id[1]=strtol(tmp2,NULL, 10);
    A priori, sa chaine ressemble à de l'hexadécimale, donc ca serait plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id[0]=strtol(tmp1, NULL, 16);
    id[1]=strtol(tmp2,NULL, 16);

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Je ne comprends pas vraiment ton problème : tu mets la valeurs 88 dans un octet, et tu sembles t'étonner que cet octet contienne cette valeur 88.

    Mais je vois que uint8_t étant probablement défini comme ceci (ou approchant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef uint8_t unsigned char;
    quand tu veux afficher ou convertir en chaîne, ton octet est considéré comme un unsigned char, qui, basiquement reste un char : tu affiches le caractère de code = 88.

    Si tu veux afficher la valeur 88, il faut caster, soit en int, uint, short, ... tu as le choix, mais il ne faut pas laisser comme un unsigned char.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    euh... bon ma question etait peut etre pas tres clair pour certain, et je l'ai comprend !, donc je tente une reformulation:

    j'ai une chaine representant une suite d'hexa 88047fb5 et je souhaiterai avoir une nouvelle ayant pour valeur je ne sait quoi qui serait code en memoire par la suite 88 04 7f b5

    sous visual studio dans memory je voudrai avoir ca par exemple :
    0x0012FE30 88 04 7f b5 00

    vouala j'espere que c'est plus clair, concernant la solution propose j'essaye mais sans resultat pour l'instant.

    Merci a tous !

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lamoufle
    j'ai une chaine representant une suite d'hexa 88047fb5 et je souhaiterai avoir une nouvelle ayant pour valeur je ne sait quoi qui serait code en memoire par la suite 88 04 7f b5

    sous visual studio dans memory je voudrai avoir ca par exemple :
    0x0012FE30 88 04 7f b5 00
    Il faut construire 4 sous chaines avec strncat() (indices 0, 2, 4, 6), les convertir en numérique avec strtoul() et la base 16 puis stocker les 4 valeurs dans un tableau de unsigned char. Une boucle peut suffire.

    C'est tout.

    Fait de ton mieux et poste ton code si tu as un problème.
    Fichiers attachés Fichiers attachés
    • Type de fichier : c main.c (398 octets, 82 affichages)

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/12/2014, 18h40
  2. transformer une string en tableau
    Par alexis.gruet dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/04/2007, 23h12
  3. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00
  4. Mapper une structure en tableau de byte
    Par zarathoustroy dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/12/2006, 15h47

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