2017-10-09 3 views
0

Je suis nouveau en C# et j'ai construit une application qui reçoit des octets d'un port série et analyse les octets.Convertir un tableau d'octets en chaîne en C#

Dans un scénario, l'application reçoit un tableau d'octets représentant une chaîne. Mon idée est de convertir les octets en chaîne et de visualiser la chaîne dans une zone de texte.

Avec ce code:

textSerialNumber.Text = Encoding.UTF8.GetString(readData.payload, 0, readData.payload.Length); 

-je obtenir la chaîne, mais il y a un problème: le premier octet reçu sur le port série est un 0x00 (il représente un ack). Lorsque je convertis la charge utile (ack + string), le premier caractère est une valeur NULL et les affectations de zone de texte échouent.

Si je modifie le code pour commencer à former le premier élément du tableau d'octets:

textSerialNumber.Text = Encoding.UTF8.GetString(readData.payload, 1, readData.payload.Length); 

dans ce cas, l'affectation de zone de texte échoue.

J'essaie de sauter l'affectation de zone de texte:

string x = Encoding.UTF8.GetString(readData.payload, 1, readData.payload.Length); 

Mais aussi int ce cas, l'encodage échoue.

Une suggestion pour trouver l'erreur?

Merci d'avance.

+0

try 'string base64 = Convert.ToBase64String (readData);' – mmushtaq

+0

Qu'est-ce que cela signifie "il échoue"? – JeffRSon

+0

Échecs signifie que la procédure d'assignation échoue et que le code atteint l'instruction catch. – Federico

Répondre

2

Essayez string x = Encoding.UTF8.GetString(readData.payload, 1, readData.payload.Length - 1);

Le dernier argument est count, donc si vous commencez de 1, le nombre doit être 1 moins.

+0

Merci Pavel! Ça marche! Mais les assignemts dans la boîte de texte échoue: ceci est ma chaîne: "V2_1928608331 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0". – Federico

+1

J'ai trouvé le problème. C# signifie qu'un autre thread essaie de modifier la zone de texte. – Federico