2010-11-30 32 views
2

J'ai écrit une fonction pour convertir byte[] en string, et j'ajoute ";" après chaque octet. Maintenant, je veux convertir ce string en byte[] en séparant la chaîne (similaire à une chaîne CSV). Comment est-ce que je pourrais écrire une fonction pour convertir cette chaîne à ce tableau d'octets encore???Conversion de chaîne en tableau d'octets en C# (CSV)

+0

est la chaîne comme 'T; *; |; m, ou' '84; 42; 124; 109;'? –

+0

"merci MAIS ça n'a pas pu m'aider! Je veux diviser ma chaîne par"; "puis le mettre dans le tableau puis le convertir en byte []" essayer d'écrire un pseudo code pour cela afin que nous puissions voir ce que vous voulez . Mon sous-entendu de ce qoute est que vous voulez lancer une chaîne [] à un octet [] tout en interprétant les valeurs de chaîne comme un octet chacun. Ce qui n'est pas possible. Vous devez convertir chaque valeur –

Répondre

1

Tenir compte à l'aide Split String

+0

merci MAIS cela ne pouvait pas m'aider! je veux diviser ma chaîne par ";" alors mettez-le dans le tableau puis convertissez-le en byte [] – sss

0
str.Split(new char[]{';'}, 
      StringSplitOptions.RemoveEmptyEntries).Select(s => byte.Parse(s)).ToArray(); 
+0

merci MAIS cela n'a pas pu m'aider! je veux diviser ma chaîne par ";" puis le mettre dans le tableau puis le convertir en byte [] – sss

+0

Essayez ceci: 'Encoding.UTF8.GetBytes (str.Replace ("; ", string.Empty);' –

+0

ne fonctionne pas byteArray [i] .ToString() + ";" ne concatène pas les valeurs de byte en tant que char mais utilise 1-3 octets de caractères –

1

cordes Builder sera utile au lieu de chaîne (Performance sage) -

avec cordes Builder vous pouvez,

  • byte [] buffer = système. Text.Encoding.UTF8.GetBytes (objStringBuilder.ToString());

avec cordes

  • byte [] buffer = System.Text.Encoding.UTF8.GetBytes (objString);
7

essayer cette

var byteArray = new byte[] {123, 11, 111}; 
var stringBytes = string.Join(";", byteArray.Select(b => b.ToString())); 
var newByteArray = stringBytes.Split(';').Select(s => byte.Parse(s)).ToArray(); 
0
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
return encoding.GetBytes(yourStringVariable); 
+0

les valeurs sont "imprimées" quelque 32 est "32" pas "" comme attendu par votre code –

1

Je suppose que vous voulez vous débarrasser de l'; lors de la conversion aussi. Je pense que vous voulez faire quelque chose comme ceci:

byte[] result = Encoding.UTF8.GetBytes(s.Replace(";","")); 

Cela échouera si le tableau d'octets d'origine contient en fait une ; qui est des données valides, mais dans ce cas, vous aurez beaucoup de problèmes de toute façon depuis votre « CSV » le fichier sera mal formaté.

0

Je sais que vous connaissez déjà la réponse maintenant ... mais ce code résout le problème, j'espère que cela aide quelqu'un d'autre.

 int counter= 0; 
     string cadena = "8,5,6,3,4,6,3" 
     string[] foto = cadena.Split(','); 
     byte[] fotoFinal = new byte[foto.Length]; 
     foreach (string s in foto) 
     { 
      fotoFinal[contador] = Convert.ToByte(s); 
      counter++; 
     } 
0

simplement :)

public static byte[] Bytes (this string Key) 
{ 
    return Enumerable.Range(0, Key.Binary().Length/8) 
        .Select(Index => Convert.ToByte(
         Key.Binary().Substring(Index * 8, 8), 2)) 
        .ToArray(); 
}