2013-05-20 13 views
5

chcę przekonwertować ciąg binarny i próbowałem ten kodKonwersja ciąg zer binarnych i jedynek

byte[] arr = System.Text.Encoding.ASCII.GetBytes(aa[i]); 

i to

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
byte[] arr= encoding.GetBytes(aa[i]); 

ale powrócił numery nie binarne powiedzieć Jeśli napiszę " m 'to przekonwertować go na "0109" i chcę przekonwertować na zera & Jedyna tylko Z góry dziękuję

+0

Ten [wpis] (http://stackoverflow.com/a/917190/1758149) wydaje się mieć to, czego szukasz. Wygląda na to, że cokolwiek masz, konwertuje ją na szesnastkową. – RyPope

+0

To wygląda na ostatnie pytanie, które zostało usunięte. –

+0

Co dokładnie oznacza tutaj "binarny"? Zarówno oryginalny ciąg, jak i 'byte []' są binarne, tak jak wszystko w komputerze. –

Odpowiedz

12

Oto przykład:

foreach (char c in "Test") 
    Console.WriteLine(Convert.ToString(c, 2).PadLeft(8, '0')); 
1

Można użyć: Convert.ToByte (wartość ciągu, int fromBase)

Zgodnie z MSDN:

fromBase Typ: System.Int32 podstawy liczby wartości, które muszą być 2, 8, 10 lub 16.

Aby uzyskać więcej szczegółów, zobacz ten link: Convert.ToByte()

2

nie jestem pewien, że całkowicie zrozumieć pytanie, ale jeśli chcesz przekonwertować tekst binarny to jak to się robi:

public byte[] ToBinary(string stringPassed) 
{ 
    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
    return encoding.GetBytes(stringPassed); 
} 

Trzeba zdać cały ciąg, a nie znaków w ciągu.

1

Więc można dostać się do bajtów, a teraz chcesz 0s wyjściowych i 1s.

Dla pojedynczej byte b

var sb = new StringBuilder(); 
for(var i=7;i>=0;i--) 
{ 
    sb.Append((b & (1<<i))==0?'0':'1'); 
} 
0

coś takiego powinien zrobić ci;

static string bytes2bin(byte[] bytes) 
{ 
    StringBuilder buffer = new StringBuilder(bytes.Length*8) ; 
    foreach (byte b in bytes) 
    { 
    buffer.Append(lookup[b]) ; 
    } 
    string binary = buffer.ToString() ; 
    return binary ; 
} 

static readonly string[] lookup = InitLookup() ; 
private static string[] InitLookup() 
{ 
    string[] instance = new string[1+byte.MaxValue] ; 
    StringBuilder buffer = new StringBuilder("00000000") ; 
    for (int i = 0 ; i < instance.Length ; ++i) 
    { 

    buffer[0] = (char)('0' + ((i>>7)&1)) ; 
    buffer[1] = (char)('0' + ((i>>6)&1)) ; 
    buffer[2] = (char)('0' + ((i>>5)&1)) ; 
    buffer[3] = (char)('0' + ((i>>4)&1)) ; 
    buffer[4] = (char)('0' + ((i>>3)&1)) ; 
    buffer[5] = (char)('0' + ((i>>2)&1)) ; 
    buffer[6] = (char)('0' + ((i>>1)&1)) ; 
    buffer[7] = (char)('0' + ((i>>0)&1)) ; 

    instance[i] = buffer.ToString() ; 
    } 
    return instance ; 
} 
+0

Podoba mi się pomysł buforowania wyszukiwania, ale nie sądzę, żebym mógł odpowiedzieć na pytanie za pomocą 8 skopiowanych i wklejonych linii. Dlaczego nie ma tu pętli 'for'? – weston

+0

@weston: eh? W inicjalizatorze nie ma wewnętrznej pętli for, ponieważ teoretycznie jest trochę wolniej, aby rozwinąć pętlę kosztem kilku dodatkowych instrukcji. Nie oznacza to, że wydajność zarówno użycia procesora, jak i pamięci ma dla niego znaczenie. Co ważniejsze, rozwijanie wewnętrznej pętli znacznie ułatwia zrozumienie kodu. Gdybym rzeczywiście poczuł potrzebę zrobienia czegoś takiego dla programu produkcyjnego, generowałbym deklarację tablicową z 256 reprezentacjami łańcuchów z perl i tym do mojego kodu. Ciągowe reprezentacje oktetów w systemie binarnym raczej nie zmienią się w najbliższym czasie. –

+0

Z pewnością rozwijanie pętli nie jest czymś, co powinieneś robić sam. Jit zrobiłby to jako podstawową optymalizację. – weston