2013-07-24 29 views
5

Esiste un modo semplice per convertire un array di byte in una stringa in modo che il seguente test dell'unità passi? Non riesco a trovare una codifica che funzioni per tutti i valori.Conversione di array di byte in stringhe in C#

[TestMethod] 
    public void TestBytToString() 
    { 
    byte[] bytArray = new byte[256]; 
    for (int i = 0; i < bytArray.Length; i++) 
    { 
     bytArray[i] = (byte)i; 
    } 
    string x = System.Text.Encoding.Default.GetString(bytArray); 
    for (int i = 0; i < x.Length; i++) 
    { 
     int y = (int)x[i]; 
     Assert.AreEqual(i, y); 
    } 
    } 
+0

'Array.ConvertAll' dovrebbero lavorare per la creazione di un' char [] ', che puoi passare ad un costruttore di stringhe. –

+0

Evitando il "perché lo faresti?" domanda, l'unica codifica in cui questa operazione sarebbe valida sarebbe ASCII, penso. – JerKimball

+0

Ascii fallisce Previsto: <128>, Effettivo: <63> – user2227596

risposta

0

questo ha funzionato:

[TestMethod] 
    public void TestBytToString() 
    { 
    byte[] bytArray = new byte[256]; 
    ushort[] usArray = new ushort[256]; 
    for (int i = 0; i < bytArray.Length; i++) 
    { 
     bytArray[i] = (byte)i; 

    } 

    string x = System.Text.Encoding.Default.GetString(bytArray); 
    for (int i = 0; i < x.Length; i++) 
    { 
     int y = System.Text.Encoding.Default.GetBytes(x.Substring(i, 1))[0]; 
     Assert.AreEqual(i, y); 
    } 
    } 
1

Il System.Text.Encoding.UTF8 dovrebbe fare un trucco per voi.

+0

Cosa succede se non è in UTF8? –

+0

Quindi cos'è la codifica? Se è un ASCII, è ancora ai margini di UTF8, che è famoso per il restringimento delle dimensioni necessarie. – Tigran

+0

Quando utilizzo UTF8 non riesce con Previsto: <128>, Effettivo: <65533>. – user2227596

1
string x = Encoding.UTF8.GetString(bytArray, 0, bytArray.Length); 
+0

Quando utilizzo quanto sopra non funziona con Previsto: <128>, Effettivo: <65533>. – user2227596

1
var str = System.Text.Encoding.Default.GetString(bytArray); 
+0

Quando utilizzo quanto sopra, fallisce l'attesa: <128>, effettiva: <8364> – user2227596

0

quanto ne so everthing sopra del valore 127 nel byte è considerato un numero negativo e come char può assumere solo valori positivi risulta un char sconosciuta in ogni codifica di prendere.

Si potrebbe voler convertire la matrice di byte a unsigned short (ushort) e poi a stringa ...