Convertion char en hexadecimal [c++] - C++ - Programmation
Marsh Posté le 29-01-2005 à 11:08:36
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.
Marsh Posté le 29-01-2005 à 11:44:48
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
Marsh Posté le 29-01-2005 à 18:04:07
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.
Marsh Posté le 29-01-2005 à 23:29:22
Tu veux afficher la valeur hexa du pointeur ou du contenu ?
Marsh Posté le 30-01-2005 à 16:26:57
bonjour HelloWorld
je veux afficher la valeur hexa du contenu
Marsh Posté le 30-01-2005 à 16:43:05
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é.
Marsh Posté le 30-01-2005 à 16:46:32
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.
Marsh Posté le 30-01-2005 à 16:47:43
ReplyMarsh Posté le 30-01-2005 à 16:56:03
Je suis en train j'ai besoin de la fonction que maintenant
Marsh Posté le 31-01-2005 à 15:13:05
bonjour j'ai encore besoin d'un petit coup de main.
Voila ma fonction :
Code :
|
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?
Marsh Posté le 31-01-2005 à 15:36:22
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.
Marsh Posté le 31-01-2005 à 15:43:35
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
Marsh Posté le 31-01-2005 à 15:52:30
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;
Marsh Posté le 31-01-2005 à 16:08:00
merci
sinon autre question la je lui fait ecrir dans un fichier.
comment lui faire ecrir mon std::hex dans une string?
Marsh Posté le 31-01-2005 à 16:59:46
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();
Marsh Posté le 31-01-2005 à 17:40:45
merci pour ta reponse mais j'ai une erreur
le code:
Code :
|
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.
Marsh Posté le 31-01-2005 à 17:54:04
ReplyMarsh Posté le 31-01-2005 à 18:07:45
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();
Marsh Posté le 01-02-2005 à 07:11:40
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.
Marsh Posté le 01-02-2005 à 09:51:45
C'est le même principe, fait avec istringstream et >> cette fois-ci.
Marsh Posté le 01-02-2005 à 19:09:17
merci de votre aide mais ce que j'ai fait n'a pas l'air correct
Code :
|
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.
Marsh Posté le 02-02-2005 à 01:17:28
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 :
|
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/
Marsh Posté le 02-02-2005 à 13:59:58
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)
Marsh Posté le 02-02-2005 à 22:47:31
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 .
Marsh Posté le 28-01-2005 à 23:54:28
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.