2009-03-17 21 views
6

Se ho avuto la seguente stringa "Blue Box", come potrei ottenere i bit che compongono la stringa in C# e quello che tipo di dati dovrei conservarla in.Come posso ottenere i bit da una stringa in C#?

Se lo faccio solo la lettera "o", mi ottieni 111 come byte e 111 come bit. Sta tagliando gli 0 e se faccio "oo", ottengo 111 per ogni o nell'array di byte, ma per i bit, ottengo il valore 28527. Perché?

+2

Leggi questo articolo: Il minimo assoluto Ogni sviluppatore di software dovrebbe conoscere le codifiche Unicode e Character (no exc usi!) http://www.joelonsoftware.com/articles/Unicode.html – mmcdole

risposta

14

Se si desidera che i bit in un formato di stringa, è possibile utilizzare questa funzione:

public string GetBits(string input) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (byte b in Encoding.Unicode.GetBytes(input)) 
    { 
     sb.Append(Convert.ToString(b, 2)); 
    } 
    return sb.ToString(); 
} 

Se si utilizza il vostro esempio "Blue Box" si get:

string bitString = GetBits("Blue Box"); 
// bitString == "100001001101100011101010110010101000000100001001101111011110000" 
5

Dipende da cosa intendi per "bit". Stai parlando della rappresentazione ASCII? UTF8? UTF16? Lo spazio dei nomi System.Text.Encoding dovrebbe iniziare.

+0

ASCII mi limiterebbe a destra. – Xaisoft

+0

non se tutto il tuo testo sarà semplicemente inglese. –

14

Si potrebbe fare la seguente:

byte[] bytes = System.Text.UTF8Encoding.Default.GetBytes("Blue Box"); 
BitArray bits = new System.Collections.BitArray(bytes); 
+1

Quale spazio dei nomi contiene BitArray? – Xaisoft

+1

System.Collections –

+0

+1 - Mai realizzato BitArray potrebbe farlo. –

Problemi correlati