2009-11-29 5 views
0

Je lis des données à partir d'un socket (en tant qu'octets) et stocke ces données dans une chaîne. Ensuite, j'ai besoin d'accéder à des octets spécifiques dans la chaîne et de faire des calculs avec eux. Cependant les octets que je lis de la chaîne ne sont pas ce que j'attends.octet VB.NET <-> erreur de conversion de chaîne/problème

Code est ici pour montrer mon problème:

Dim bytTest() As Byte = {131, 0} 
    Dim strTest As String 
    strTest = System.Text.ASCIIEncoding.ASCII.GetString(bytTest) 
    MsgBox(bytTest(0) & " = " & Asc(strTest.Substring(0, 1))) 

Ce produit "131 = 63", mais je me serais attendu à produire "131 = 131". Quelqu'un peut-il m'expliquer pourquoi et comment résoudre ce problème? Merci

+0

Pourquoi avez-vous besoin de convertir les octets en chaîne? –

+0

Je pense qu'il compose une chaîne en ASCII encodant sur les octets reçus. – Konamiman

+0

correct Konamiman – Brian

Répondre

1

Le codage ASCII utilise uniquement les 7 bits inférieurs d'un octet pour chaque caractère. Ainsi, si vous passez un octet avec la valeur 131, vous obtiendrez des résultats inattendus, puisque le bit haut est défini pour cette valeur.

1

ASCIIEncoding est limité aux 7 premiers bits (caractères 0-127), donc essayer de stocker le caractère avec une valeur de 131 ne fonctionnera pas comme prévu.

Utilisez plutôt UTF-8.

+0

pas besoin de UTF-8, tout ce dont j'avais besoin était System.Text.Encoding.GetEncoding (1252) au lieu de l'ASCII – Brian

Questions connexes