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

Messages postés
40
Date d'inscription
lundi 18 février 2002
Dernière intervention
5 novembre 2012
- - Dernière réponse : SharpMao
Messages postés
1025
Date d'inscription
mardi 4 février 2003
Dernière intervention
7 juin 2010
- 27 janv. 2009 à 13:30
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1025
Date d'inscription
mardi 4 février 2003
Dernière intervention
7 juin 2010
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de SharpMao
Messages postés
40
Date d'inscription
lundi 18 février 2002
Dernière intervention
5 novembre 2012
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_arb
Messages postés
327
Date d'inscription
mardi 17 février 2004
Dernière intervention
10 avril 2010
0
Merci
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
Commenter la réponse de WishhhMaster
Messages postés
327
Date d'inscription
mardi 17 février 2004
Dernière intervention
10 avril 2010
0
Merci
Oh désolé pour le double post. J'avais pas refresh
Commenter la réponse de WishhhMaster
Messages postés
1025
Date d'inscription
mardi 4 février 2003
Dernière intervention
7 juin 2010
0
Merci
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)
Commenter la réponse de SharpMao

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.