2010-08-27 21 views
34

En C# Estoy convirtiendo un byte en binary, la respuesta real es 00111111 pero el resultado es 111111. Ahora realmente necesito mostrar incluso los 2 0s en frente. ¿Puede alguien decirme cómo hacer esto?Convirtiendo un byte a una cadena binaria en C#

estoy usando:

Convert.ToString(byteArray[20],2) 

y el valor de byte es 63

+0

similar, pero a la inversa: http://stackoverflow.com/questions/72176/using-c-what-is-the-most-efficient-method-of- converting-a-string-containing-bi –

Respuesta

38

acaba de cambiar su código para:

string yourByteString = Convert.ToString(byteArray[20], 2).PadLeft(8, '0'); 
// produces "00111111" 
+0

este método siempre hará que la cadena con 8 dígitos sea correcta? por lo que si voy a tener un valor diferente, por ejemplo, 10001111 esto no va a añadir nuevos 0s delante – IanCian

+3

@IanCian correcta, no importa lo que siempre habrá 8 dígitos por lo que si a todos ellos la oferta, el 'PadLeft' no hará nada, pero si no, llenará el espacio de la izquierda a la izquierda con 0s. – Kelsey

+0

Tienes razón, mi sugerencia no era correcta. No lo probé. – Zach

0

Prueba con esto:

public static String convert(byte b) 
{ 
    StringBuilder str = new StringBuilder(8); 
      int[] bl = new int[8]; 

    for (int i = 0; i < bl.Length; i++) 
    {    
     bl[bl.Length - 1 - i] = ((b & (1 << i)) != 0) ? 1 : 0; 
    } 

    foreach (int num in bl) str.Append(num); 

    return str.ToString(); 
} 
19

Si Entiendo correctamente, tienes 20 v alues ​​que desea convertir, por lo que es un simple cambio de sombrero que escribió.

Para cambiar un solo byte de cadena de 8 Char: Convert.ToString(x, 2).PadLeft(8, '0')

Para cambiar arsenal completo:

byte[] a = new byte[] { 1, 10, 100, 255, 200, 20, 2 }; 
string[] b = a.Select(x => Convert.ToString(x, 2).PadLeft(8, '0')).ToArray(); 
// Returns array: 
// 00000010 
// 00010100 
// 11001000 
// 11111111 
// 01100100 
// 00001010 
// 00000001 

Para cambiar la matriz de bytes en una sola cadena, con bytes separados con el espacio:

byte[] a = new byte[] { 1, 10, 100, 255, 200, 20, 2 }; 
string s = string.Join(" ", 
    a.Select(x => Convert.ToString(x, 2).PadLeft(8, '0'))); 
// Returns: 00000001 00001010 01100100 11111111 11001000 00010100 00000010 

si ordenamiento de bytes es incorrecta utilización IEnumerable.Reverse():

byte[] a = new byte[] { 1, 10, 100, 255, 200, 20, 2 }; 
string s = string.Join(" ", 
    a.Reverse().Select(x => Convert.ToString(x, 2).PadLeft(8, '0'))); 
// Returns: 00000010 00010100 11001000 11111111 01100100 00001010 00000001 
2

prueba este

public static string ByteArrayToString(byte[] ba) 
    { 
     StringBuilder hex = new StringBuilder(ba.Length * 2); 
     foreach (byte b in ba) 
      hex.AppendFormat("{0:x2}", b); 
     return hex.ToString(); 
    } 
Cuestiones relacionadas