Probleme de conversion char int string...

Signaler
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
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 ...!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

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 ?!
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

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] ;
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

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.
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

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...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

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é ?!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

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 ^'
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++