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 un hexa


Sujet :

C

  1. #1
    Membre averti
    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
    Par défaut Formater un hexa
    Bonjour a tous,

    je me retrouve face a un chtit probleme qui m'exaspere ! il doit y'avoir une solution toute bete mais je tourne autour sans l'attraper!

    J'explique: je recois une chaine (char *)du type F00000000201 qui represente un hexa, et je souhaite tout betement prendre chacun de ces hexa pour les enregistrer dans un tableau

    uint8_t char[100] tab;
    tab[1]=0xF0
    tab[2]=0x00
    tab[3]=0x00
    tab[4]=0x00
    tab[5]=0x02
    tab[6]=0x01

    Vouala !! ca parait pas si compliquer que ca quand meme !!!! pourquoi j'y arrive pas ?

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    À la ligne 42 de ton programme, le > devrait être >=.

  3. #3
    Membre averti
    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
    Par défaut
    gloups ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Traduction: Poste ce que tu as fait, on t'aidera à corriger.
    Et c'est marqué dans les règles, on ne pond pas d ecode source à partir du vide...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    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
    Par défaut
    ok, j'avais omis le code car je ne le trouvai pas tres interressant mais bon ,

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    	uint8_t i=0;
    	uint8_t aidSize=0;
     
    //le format qu'il me faut {0xF0,0x00,0x00,0x00,0x02,0x01}
     
    char tmp[]="F000021";// 0xF0,0x00,0x00,0x00,0x02,0x01
    	if(NULL != pCmdAid)
    		midpFree(pCmdAid);
     
    	pCmdAid=midpMalloc(sizeof(aid_t)+1);
     
    	if(NULL == pCmdAid)
    		return _ERROR;
     
    	aidSize=strlen(tmp);
    	while(i < aidSize){
    		pCmdAid->Aid[i]=tmp[i];
    		i++;
    	}
     
    	pCmdAid->Aid[i]='\0';
    	pCmdAid->AidSize=(aidSize/2)-1;
     
    	sendAid(pCmdAid);
     
     
    	  return _SUCCESS;
    j'ai essaye plein de chose avec des sprintf etc.. mais j'ai pas encore eu l'etincelle !

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Tu peux convertir une chaîne exprimant un nombre en hexa en un entier avec la fonction stdtol() (maximum: La taille d'un long, ici, 32 bits).

    Si tu prévois de convertir plus de 32 bits (i.e., des chaînes de plus de 8 caractères), tu devras procéder par morceaux.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    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
    Par défaut
    humf strtol ?

    je fais un strtol(tmp[i],NULL,10);
    j'obtiens donc F en long mais apres je vois pas en quoi ca m'avance ?

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Tu l'emploies mal, je suis même surpris que ça compile sans gueuler...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Avec une chaîne de 8 caractères max:
    long leNombreEnHexa = strtol(tmp, NULL, 16);
    Si tu as plus de caractères, il faudra procéder par petits morceaux de chaîne, dans une boucle...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre averti
    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
    Par défaut
    en fait je ne comprend pas ce que tu veut faire avec ton strtol ?

    je passe a strtol le caractere F j'obtiens un long et apres ?

    au final je vais avoir une dizaine de long ....

    moi pas tout comprendre !

    sorry ;-)

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Une boucle pour remplir ton tableau de uint8_t:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //on suppose que tab est un pointeur ou un tableau assez grand
    //on suppose aussi que la longueur de tmp est paire
    size_t nbOctets = strlen(tmp)/2;
    size_t i;
     
    for(i=0 ; i<nOctets ; i++)
    	{
    	char szOctet[3] = { tmp[2*i], tmp[2*i+1], '\0' };
    	long nOctet = strtol(szOctet, NULL, 16);
    	tab[i] = (uint8_t)nOctet;
    	}
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre averti
    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
    Par défaut
    ok ! it works !!!

    merci beaucoup, j'avais effectivement regarder du cote de strtol mais mon cerveau pas tres reveille n'avait pas percute !!

    merci !!

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/05/2015, 10h22
  2. Afficher un string en format Hexa sur une Windows Form
    Par gabouche dans le forum C++/CLI
    Réponses: 3
    Dernier message: 07/06/2012, 13h30
  3. Format en hexa décimal
    Par Crosser02 dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2009, 14h06
  4. decoder des entrées en Hexa suivant le format UTF8 et afficher le resultat
    Par Septembre84 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 16/04/2008, 16h10
  5. format conversion hexa-->dec negative
    Par sone47 dans le forum Langage
    Réponses: 1
    Dernier message: 14/01/2008, 22h12

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