Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1337 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++] Convertion char en hexadecimal

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] Convertion char en hexadecimal

n°965187
tocx
be free, be linux
Posté le 28-01-2005 à 23:54:28  profilanswer
 

Bonjour tout le monde.
Je recupere des données dans un buffer : char *buffer[255]
et j'aimerais le convertir en hexadecimal et l'afficher dans la console.
J'ai chercher un peu de partout mais je n'ai pas trouvé grand chose de concluant.
 
S'il vous plait un petit peu d'aide. Bonne soiré à tous et a toutes.

mood
Publicité
Posté le 28-01-2005 à 23:54:28  profilanswer
 

n°965233
Taz
bisounours-codeur
Posté le 29-01-2005 à 00:44:45  profilanswer
 

std::cout << std::hex << static_cast<int>('a')

n°965314
tocx
be free, be linux
Posté le 29-01-2005 à 11:08:36  profilanswer
 

Merci de ta reponse mais je bloque.
si je met  
char *buffer = "test";
std::cout << std::hex << static_cast<char*>(buffer);
il me retourne le buffer en ASCII et non en hexa.
 
Merci encore pour ton aide. Si quelqu'un pouvait encore un peu m'aider ca serai sympa.

n°965326
Taz
bisounours-codeur
Posté le 29-01-2005 à 11:44:48  profilanswer
 

char *buffer = "test"; ... manque un const
 
tatic_cast<char*>(buffer) tu peux nous expliquer ce que tu fais là ...
 
 
toutes façons, il faut que tu fasses un affichage pour chaque caractère

n°965466
tocx
be free, be linux
Posté le 29-01-2005 à 18:04:07  profilanswer
 

comment faire alors a partir d'un char * pour afficher sa valeur hexa?
S'il te plait aide moi une fois de plus.
 
Merci pour ton aide deja et bonne fin d'aprem.


Message édité par tocx le 29-01-2005 à 18:04:27
n°965477
Taz
bisounours-codeur
Posté le 29-01-2005 à 18:23:41  profilanswer
 

std::cout << static_cast<void*>(buffer);

n°965683
HelloWorld
Salut tout le monde!
Posté le 29-01-2005 à 23:29:22  profilanswer
 

Tu veux afficher la valeur hexa du pointeur ou du contenu ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°966069
tocx
be free, be linux
Posté le 30-01-2005 à 16:26:57  profilanswer
 

bonjour HelloWorld  
je veux afficher la valeur hexa du contenu

n°966075
Taz
bisounours-codeur
Posté le 30-01-2005 à 16:43:05  profilanswer
 

ben c'est quand tu veux pour te sortir les doigts. T'as le code pour afficher un char en hexa d'un côté, et ton char* de l'autre ... nous demande pas de t'écrire la boucle. Ça fait 2 jours que t'es dessus, on peut pas dire que tu fasses preuve de volonté.

n°966080
tocx
be free, be linux
Posté le 30-01-2005 à 16:46:32  profilanswer
 

lol
Je ne fais pas que ca je me suis pas penché sur le probleme depuis que tu mais filé le
std::cout << std::hex << static_cast<int>('a')
Je code le reste du soft a coté. Je n'ai fait que répondre a sa question. Je n'ai en aucun cas demandé a ce que l'on me code la boucle.
 
Enfin merci de votre aide.

mood
Publicité
Posté le 30-01-2005 à 16:46:32  profilanswer
 

n°966081
Taz
bisounours-codeur
Posté le 30-01-2005 à 16:47:43  profilanswer
 

tocx a écrit :


Je code le reste du soft a coté.

mais est-ce que tu l'as écrite cette boucle ?

n°966088
tocx
be free, be linux
Posté le 30-01-2005 à 16:56:03  profilanswer
 

Je suis en train j'ai besoin de la fonction que maintenant

n°966840
tocx
be free, be linux
Posté le 31-01-2005 à 15:13:05  profilanswer
 

bonjour j'ai encore besoin d'un petit coup de main.
Voila ma fonction :
 

Code :
  1. char GetPacketHexa(char *packet, char *hexa)
  2. {
  3.     const char *fichier = "temp.dat";
  4.     ofstream fout(fichier);
  5.    
  6.     int len = strlen(packet);
  7.     printf("Taille du packet: %d\n", len);
  8.    
  9.     while(len >= 1)
  10.     {
  11.         printf("Len: %d\n", len);
  12.         printf("Packet: %s\n", packet++);
  13.         fout << std::hex << static_cast<int>(*packet);
  14.         fout << " ";
  15.        
  16.         packet = strpbrk(packet, "abcdefghijklmnopqrstuvwxyz " );
  17.         len = len--;
  18.     }
  19.    
  20.     return *hexa;
  21. }


 
maintenant mon probleme vien du strpbrk. En fait je voudrai enlever le premier caractere de la chaine a chanque fois. Malheuresement il n'y a pas que abcde... 1234567890 espace et autre. Il est possible que dans mon char* j'ai tout les caractere mais je ne peu pas tous les passer en argument de strpbrk.
Vous n'ouriez pas une solution a me proposer s'il vous plait?

n°966870
Tarabiscot​e
Posté le 31-01-2005 à 15:36:22  profilanswer
 

Aie ! Il y en a qui risque de ne pas aimer que tu mélanges le C et le C++ mais autrement pourquoi tu fais pas ++packet; tout simplement (tu le fais en plus déjà dans le printf) ?
 
Et ca c'est quoi : len = len--; ?
Tu voulais pas plutot faire len++; ?
 
Bon je passe le reste mais je pense que tu devrais commencer par revoir les bases.


Message édité par Tarabiscote le 31-01-2005 à 15:44:21
n°966882
tocx
be free, be linux
Posté le 31-01-2005 à 15:43:35  profilanswer
 

non non len-- du o while( len >= 1)
il faut bien diminuer len
et je comprend pas ton packet++
peut tu mexpliquer s'il te plait

n°966898
Tarabiscot​e
Posté le 31-01-2005 à 15:52:30  profilanswer
 

Ben oui pour diminuer len on fait généralement len--; ou len -= 1; ou encore len = len - 1; mais pas len = len--;
 
Autrement packet++ permet de passer au caractere suivant (si c'est bien ce que tu veux faire).
 
Mais tu le fais déjà dans le printf (ligne 12) autrement dit tu es déjà au 2eme caractere lorsque  tu fais :
fout << std::hex << static_cast<int>(*packet);
 
Sinon tu devrais remplacer tes printf par des cout, par exemple :
cout << "Len: " << len << endl;

n°966914
tocx
be free, be linux
Posté le 31-01-2005 à 16:08:00  profilanswer
 

merci  
sinon autre question la je lui fait ecrir dans un fichier.
comment lui faire ecrir mon std::hex dans une string?

n°966983
Tarabiscot​e
Posté le 31-01-2005 à 16:59:46  profilanswer
 

Hum je pense qu'il faut faire en deux fois :
// en premier dans un ostringstream
ostringstream temp;
temp << hex << static_cast<int>('a');
// et ensuite dans la string
string toto = temp.str();

n°967065
tocx
be free, be linux
Posté le 31-01-2005 à 17:40:45  profilanswer
 

merci pour ta reponse mais j'ai une erreur
le code:
 

Code :
  1. char GetPacketHexa(char *packet)
  2. {
  3.     char *hexa;
  4.     const char *fichier = "temp.dat";
  5.     ofstream fout(fichier);
  6.     ostringstream temp;
  7.    
  8.     int len = strlen(packet);
  9.     printf("Taille du packet: %d\n", len);
  10.    
  11.     while(len >= 1)
  12.     {
  13.         printf("Len: %d\n", len);
  14.         printf("Packet: %s\n", packet++);
  15.         fout << std::hex << static_cast<int>(*packet);
  16.         temp << std::hex << static_cast<int>(*packet);
  17.         fout << " ";
  18.        
  19.         len--;
  20.        
  21.         hexa = temp.str();
  22.     }
  23.    
  24.     return *hexa;
  25. }


 
voila et mon erreur :
aggregate `std::ostringstream temp' has incomplete type  and cannot be defined
 
je ne la comprend pas.
merci encore pour ton aide.


Message édité par tocx le 31-01-2005 à 17:41:09
n°967090
HelloWorld
Salut tout le monde!
Posté le 31-01-2005 à 17:54:04  profilanswer
 

as-tu inclu <sstream> ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°967115
Tarabiscot​e
Posté le 31-01-2005 à 18:07:45  profilanswer
 

J'ai peut etre oublié de préciser qu'il fallait rajouter :
#include <sstream>
 
Mais c'est pour mettre dans un string et pas un char* (ce que je te conseil d'ailleur)
 
Autrement si tu veux vraiment un char* faut mettre :
    size_t longueur = temp.str().size() + 1;
    hexa = new char[longueur];
    strncpy(hexa, temp.str().c_str(), longueur);
à la place de :
    hexa = temp.str();

n°967890
tocx
be free, be linux
Posté le 01-02-2005 à 07:11:40  profilanswer
 

Merci ca marche comme sur des roulettes.
Si je peu abuser encore une fois maintenant je cherche a faire une convertion d'une chaine hexa pas exemple
char *hexa = "01 01 04 02 02 04 05 B4";
vers un char *send;
comment faire?
Merci encore Tarabiscote de ton aide.

n°967943
HelloWorld
Salut tout le monde!
Posté le 01-02-2005 à 09:51:45  profilanswer
 

C'est le même principe, fait avec istringstream et >> cette fois-ci.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°968690
tocx
be free, be linux
Posté le 01-02-2005 à 19:09:17  profilanswer
 

merci de votre aide mais ce que j'ai fait n'a pas l'air correct
 

Code :
  1. char *GetAscii(char *packet, char *hexa)
  2. {
  3.     int len = strlen(packet);
  4.     printf("Taille du packet: %d\n", len);
  5.    
  6.     istringstream temp;
  7.    
  8.     while(len >= 1)
  9.     {
  10.         printf("Len: %d\n", len);
  11.         printf("Packet: %s\n", packet++);
  12.         temp >> std::hex >> static_cast<int>(*packet);
  13.        
  14.         len--;
  15.     }
  16.    
  17.     cout << temp << endl;
  18.    
  19.     return hexa;
  20. }


 
avec comme string char *packet = "61";
il m'affiche, lors du cout << temp << endl;, "0".
Je pense que je fait erreur quelque part mais je ne sais pas ou.
 
En tout cas merci de votre aide.

n°968910
HelloWorld
Salut tout le monde!
Posté le 02-02-2005 à 01:17:28  profilanswer
 

Ah oui y'a plusieurs pblm. Deja apprends à utiliser std::string et oublie strlen et les char * pour les chaines de caractère. Ensuite faut initialiser ton istringstream avec la chaine sous forme hexa. Puis extraire des char avec l'opérateur >> tant que ça marche. Chaque caractère extrait tu l'ajoutes à la chaine à renvoyer.

Code :
  1. std::string GetAscii( const std::string & HexaString )
  2. {
  3.     istringstream iss( HexaString );
  4.     std::string result;
  5.     char c;
  6.     while ( iss >> std::hex >> c )
  7.     {
  8.         result.push_back( c );
  9.     }
  10.     return result;
  11. }


Y'en a un qui va gueuler mais tant pis, lis cette FAQ le sujet sur les string devrait t'éclairer.
http://c.developpez.com/faq/cpp/?page=strings
Pour pas faire passer ça pour de la pub, d'autres FAQ à consulter:
http://www.cmla.ens-cachan.fr/Util [...] s/C++/FAQ/
http://www.parashift.com/c++-faq-lite/


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°969356
Tarabiscot​e
Posté le 02-02-2005 à 13:59:58  profilanswer
 

Désolé de pas avoir pu répondre hier.
 
Sinon je suis d'accord avec HelloWorld si ce n'est que je mettrai plutot short c; à la place de char c; (sinon il risque de prendre chiffre par chiffre à la place de prendre les 2 chiffres hexa)
 
De plus les chiffres doivent etre séparé par un espace (avec ce bout de code) ce qui n'est pas le cas de la fonction précédente (si c'est fait pour aller avec)

n°970007
HelloWorld
Salut tout le monde!
Posté le 02-02-2005 à 22:47:31  profilanswer
 

Moi je suis parti de ça:

Citation :

char *hexa = "01 01 04 02 02 04 05 B4";  


Par contre j'ai testé c'est vrai qu'il prend char par char, le std::hex ne change rien. Donc mettre short ou int pour le forcer a bien prendre chaque groupe de chiffres :jap:.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++] Convertion char en hexadecimal

 

Sujets relatifs
Convertion binaire /hexa[Java/SNMP] Convertion MIB/XML
probleme avec un tableau (char) dans cSaisir un char* pour le retourner
Défi: optimisation d'une fonction de convertion (Bin => Dec)[C] Convertion double -> dec -> hex
Pb avec les char * en Cbesoin d'aide pour convertion html-->css
Passer de char array a stringchar traité comme un short
Plus de sujets relatifs à : [c++] Convertion char en hexadecimal


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR