2011-05-15 16 views
5

Witaj, mogę przekonwertować ciąg znaków ASCII na plik binarny, używając binarywriter .. jako 10101011. im wymagane z powrotem do konwersji Binary --->ASCII ciąg .. jakiś pomysł, jak to zrobić?Konwersja ciągów znaków binarnych na ASCII

+1

System.Text.Encoding.ASCII.GetString (dane)? –

+3

Co jest nie tak z Convert.ToBase64String (dane)? Dlaczego przenosisz bajty do strumienia i odczytywanie tych bajtów z powrotem z tego strumienia? –

+0

'ToBase64String' daje mi wartość Base64, a nie tekst! – Sudantha

Odpowiedz

18

To powinno załatwić sprawę ... albo przynajmniej na początek ...

public Byte[] GetBytesFromBinaryString(String binary) 
{ 
    var list = new List<Byte>(); 

    for (int i = 0; i < binary.Length; i += 8) 
    { 
    String t = binary.Substring(i, 8); 

    list.Add(Convert.ToByte(t, 2)); 
    } 

    return list.ToArray(); 
} 

Gdy ciąg binarny został przekonwertowany do tablicy bajtów, wykończenia z

Encoding.ASCII.GetString(data); 

Więc ...

var data = GetBytesFromBinaryString("010000010100001001000011"); 
var text = Encoding.ASCII.GetString(data); 
+0

Podziękowania dla wielu programistów .. Dokładnie to, czego potrzebowałem i działałem niesamowicie! .. Próbowałem cały dzień z blackoutem i nareszcie !! wielkie dzięki ! : D – Sudantha

+0

@Sudantha: pomaga zadać właściwe pytanie. –

+0

@Sudantha: Połączyłem twoje dwa identyczne pytania; możesz ponownie zaakceptować tę odpowiedź (została zaakceptowana w drugim pytaniu). – balpha

1

Weź to jako prosty przykład:

public void ByteToString() 
{ 
    Byte[] arrByte = { 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }; 

    string x = Convert.ToBase64String(arrByte); 
} 

ta związana odpowiedź ma ciekawe szczegóły dotyczące tego rodzaju konwersji:

binary file to string

+0

HI leniel im posiadających ciąg jak przekonwertować go do 'byte []' i użył 'Encoding.ASCHII' .... ale daje junk ~ – Sudantha

+0

@Sudantha: spójrz na połączoną odpowiedź ... –

2

Oto kompletny kod na swoją answer

FileStream iFile = new FileStream(@"c:\test\binary.dat", 
FileMode.Open); 

long lengthInBytes = iFile.Length; 

BinaryReader bin = new BinaryReader(aFile); 

byte[] byteArray = bin.ReadBytes((int)lengthInBytes); 

System.Text.Encoding encEncoder = System.Text.ASCIIEncoding.ASCII; 

string str = encEncoder.GetString(byteArray); 
+0

Dobra racja. –

5

Jeśli masz ASCII czarter tylko Ty mógłbyś użyć Encoding.ASCII.GetBytes i Encoding.ASCII.GetString.

var text = "Test"; 
var bytes = Encoding.ASCII.GetBytes(text); 
var newText = Encoding.ASCII.GetString(bytes); 
0

Sometim es zamiast używać wbudowanego narzędzia lepiej wykorzystać „niestandardową” Kod .. spróbować tej funkcji:

public string BinaryToString(string binary) 
{ 
    if (string.IsNullOrEmpty(binary)) 
     throw new ArgumentNullException("binary"); 

    if ((binary.Length % 8) != 0) 
     throw new ArgumentException("Binary string invalid (must divide by 8)", "binary"); 

    StringBuilder builder = new StringBuilder(); 
    for (int i = 0; i < binary.Length; i += 8) 
    { 
     string section = binary.Substring(i, 8); 
     int ascii = 0; 
     try 
     { 
      ascii = Convert.ToInt32(section, 2); 
     } 
     catch 
     { 
      throw new ArgumentException("Binary string contains invalid section: " + section, "binary"); 
     } 
     builder.Append((char)ascii); 
    } 
    return builder.ToString(); 
} 

Testowane z 010000010100001001000011 powrócił ABC używając „raw” wartości ASCII.

Powiązane problemy