2011-05-15 23 views
5

Hola, pude convertir una cadena ASCII en binario usando un binarywriter .. como 10101011. estoy obligado a volver a convertir Binary --->ASCII cadena ... alguna idea de cómo hacerlo?Conversión de cadena binaria a ASCII correspondiente

+1

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

+3

¿Qué pasa con Convert.ToBase64String (datos)? ¿Por qué está metiendo los bytes en una secuencia y leyendo esos bytes nuevamente desde esa secuencia? –

+0

'ToBase64String' me da un valor Base64 ¡no un Texto! – Sudantha

Respuesta

18

Esto debería hacer el truco ... o al menos empezar ...

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(); 
} 

Una vez que la cadena binaria se ha convertido en una matriz de bytes, terminar con

Encoding.ASCII.GetString(data); 

Entonces ...

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

Gracias un codificador de lotes. ¡Exactamente lo que necesitaba y trabajando asombrosamente! ¡¡Intenté todo el día con un apagón y finalmente !! muchas gracias ! : D – Sudantha

+0

@Sudantha: ayuda hacer la pregunta correcta. –

+0

@Sudantha: he combinado sus dos preguntas idénticas; es posible que desee volver a aceptar esta respuesta (fue aceptada en la otra pregunta). – balpha

1

Toma esto como un simple ejemplo:

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

    string x = Convert.ToBase64String(arrByte); 
} 

Esta respuesta vinculada tiene detalles interesantes acerca de este tipo de conversión:

binary file to string

+0

HI leniel im teniendo un string como convertirlo a 'byte []' usé 'Encoding.ASCHII' .... pero da un junk ~ – Sudantha

+0

@Sudantha: eche un vistazo a la respuesta vinculada ... –

2

Aquí está el código completo para su 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

Buen punto allí. –

5

Si tiene ASCII chárters solo puede usar Encoding.ASCII.GetBytes y Encoding.ASCII.GetString.

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

Sometim ES en lugar de utilizar el construido en herramientas que es mejor usar el código "a medida" .. probar esta función:

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(); 
} 

Probado con 010000010100001001000011 volvió ABC utilizando los valores ASCII "en bruto".

Cuestiones relacionadas