Convertir un tableau de code ASCII reçu par le port COM [Résolu]

Signaler
Messages postés
40
Date d'inscription
lundi 18 février 2002
Statut
Membre
Dernière intervention
5 novembre 2012
-
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
-
Bonjour

J'ai une appli qui me permet de recevoir des valeurs (entier sur 32 bits) envoyés par un petit microcontroleur. Je récupère les codes ASCII, mais je n'arrive pas à les convertir pour retrouver mon nombre entier sur 32 bits et aussi à l'afficher dans un TextBox :
pour le nombre 2, par exemple je reçois 0x30,0x30,0x30,0x32. j'ai donc besoin de faire la conversion ensuite; j'ai tout essayé, passé par un tableau, string, etc.... rien à faire...
Merci de votre aide
Arb

5 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
58
Hello,

Le port COM, t'envoie des bytes, il te faut les transformer en char pour pouvoir construir une string :

            byte[] input = new byte[] { 0x30, 0x30, 0x30, 0x32 };

            StringBuilder sb = new StringBuilder();
            foreach (byte b in input)
                sb.Append((char)b);

            int result = int.Parse(s.ToString());

Et voilà le travail !

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
40
Date d'inscription
lundi 18 février 2002
Statut
Membre
Dernière intervention
5 novembre 2012
3
Merci pour vos réponses et je rajoute :



byte[] input = new byte[] { 0x30, 0x30, 0x30, 0x32 };

            StringBuilder sb = new StringBuilder();
            foreach (byte b in input)
                sb.Append((char)b);

            int result = int.Parse(s.ToString());

MaTextBox.text = Convert



.ToInt32(

"0x"
+ result, 16)).ToString() pour afficher la valeur entière (ex si result = 0x22, affichage de 34 dans MaTextBox)
Messages postés
327
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
10 avril 2010
6
Salut,

Si je comprends bien, pour le nombre 2 il t'envoie en fait les caractères pour 0002.

Essaye ça
byte[] arr = new byte[] { 0x30, 0x30, 0x30, 0x32 };
string s = new string(ASCIIEncoding.ASCII.GetChars(arr));
int nombre = Convert.ToInt32(s);

Sinon tu peux convertir les int retournés par le microcontrôleur en char et les ajouter un par a une string et convertir la string en entier.  Sinon tu peux jouer directement avec les caractères ASCII et calculer le nombre ASCII directement
Messages postés
327
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
10 avril 2010
6
Oh désolé pour le double post. J'avais pas refresh
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
58
Hello,

Tu n'as pas besoin de faire la conversion, la variable result contient la bonne valeur.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)