Probleme de conversion char int string...

pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010 - 23 janv. 2008 à 18:29
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 24 janv. 2008 à 17:22
Salut,

Je code un échange de trames (t'chat) par port série entre 2 PC en C++ .net VStudio 2k5.
J'envoie la chaine 'toto' du PC1 vers PC2, avec l'hyperterminal sur mon port COM1 je recois bien la chaine.
Par contre mon programme en C++ pour recevoir mon 'toto' ne fonctionne pas totalement.
J'utilise la fonction ReadChar() du port série :
textBox1->Text = serialPort1->ReadChar();
qui d'apres la msdn doit me renvoyer un char.
Or quand j'affiche, j'ai '116' qui s'affiche, qui correspond au code ASCII de la lettre 't'.

Comment passer du code décimal de 't' à son caractere ?

Merci bcp !

15 réponses

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
23 janv. 2008 à 20:09
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
23 janv. 2008 à 20:32
Salut,
considere ke la fonction te renvoie un byte (donc un octet brut), si tu veux afficher une lettre , sauvegarde dans un tableau de char.

je suis heureux de faire partie d'une grande famille ...!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 janv. 2008 à 22:13
Faut commencer par le C, ça nous évitera de voir des questions à la VB sur cppfrance.
La valeur du caractère (de l'octet) EST ce caractère, il n'y a rien à convertire.

char buf[4];
buf[1] = 0; // finisseur de chaine

buf[0] = ValeurEntre1Et255;
MessageBox(0, buf, "Mon caractere", 0);

ciao...
BruNews, MVP VC++
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
24 janv. 2008 à 14:37
Merci pour vos aides.
atoi() ne fonctionne pas, 'atoi' : cannot convert parameter 1 from 'int' to 'const char *'
De toute facon d'apres ce que j'ai lu, atoi() converti vers un int, or moi je veux un char..

BruNews, je ne vois pas trop comment ton code pourrait m'aider.. :(

Je ne comprends pas pourquoi serialPort1->ReadChar() me renvoie un int alors que la doc précise que c'est un char ?!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
24 janv. 2008 à 14:59
N'utilise pa atoi j'avais pas lu ta question jusqu'au bout..
Quelque soit le type de ta variable, celle ci ne pourra stoquer que des chiffres la seul chose qui diférencie un char d'un short ou d'un int c'est sa taille 1, 2 ou 4 octets, sur un char tu pourra donc stoquer un chiffre allant de -127 a 127 ou de 0 a 255 pour un unsigned char..
ReadChar te renvoie une valeur entre 0 a 255, tu na plus qua creer ta chaine comme ca:
BYTE Str[16];
Str[0] = serialPort1->ReadChar();
Str[1] = serialPort1->ReadChar();
...
test[15] = 0;
MessageBox(0, Str, "Str=", 0);

Neo_Fr
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
24 janv. 2008 à 15:25
Merci de ton aide, je pense avoir compris.
Mais ca ne change pas, si je veux recuéprer la première lettre j'ai toujours le code 116 pour 't' :(

char Str[16];
Str[0] = serialPort1->ReadChar();
textBox1->Text = Str[0] ;
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
24 janv. 2008 à 15:33
En fait mon problème c'est l'affichage dans ma textbox
j'aurais un printf() je mettrai un %c et c'est bon mais là avec ma textBox je ne sais pas comment faire.
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
24 janv. 2008 à 15:35
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2008 à 15:42
Quand je dis qu'il manque les bases, mais alors TOUTES les bases.
Il devrait être interdit de toucher à l'interprété sans examen de C sinon voila à quoi ça mène.

textBox1->Text = Str[0] ;
c'est une chaine qui doit être nevoyée à l'affichage, pas un octet. Une chaine se compose par force d'un terminateur NULL = 0.

ciao...
BruNews, MVP VC++
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
24 janv. 2008 à 15:55
Oui je n'ai pas toutes les bases, c'est pour ca que j'apprend..
Je l'ai fait en console avec un printf() et %c, ca marchait bien.
Je veux juste maintenant utiliser ma textBox...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2008 à 16:16
Tu n'apprendras rien en interprété, au moins la console c'est du natif.
C++ .NET, il ne reste de C++ que le nom, rien d'autre.

ciao...
BruNews, MVP VC++
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
24 janv. 2008 à 16:42
Je veux juste savoir comment formater une chaine pour qu'elle s'affiche dans ma texBox, l'équivalent du %c pour un printf !
C'est trop demandé ?!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2008 à 16:50
Comme dit maintes fois plus haut.

On y met tous les octets qu'on veut en EN DERNIER un ZERO qui est le terminateur de chaine.

ciao...
BruNews, MVP VC++
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
24 janv. 2008 à 17:11
Merci.
D'apres ce que j'ai compris :
Envoie de 'toto'

char c[5];
c[0] = serialPort1->ReadChar();
c[1] = serialPort1->ReadChar();
c[2] = serialPort1->ReadChar();
c[3] = serialPort1->ReadChar();
c[4] = 0;
textBox1->Text = c;

mais là evidement :
cannot convert parameter 1 from 'System::String' to 'System::String ^'
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2008 à 17:22
peut-etre
str = str + octet;
str = str + octet;
etc...

résultat, en VB.NET ils obtiendront la même daube en 3 clics sans se burner avec la syntaxe de fou de ce faux C++.
Resultat de la fonction: goto chomage;

ciao...
BruNews, MVP VC++
0
Rejoignez-nous