2011-01-28 12 views
30

Quiero mostrar un byte en el cuadro de texto. Ahora estoy usando:Byte a cadena binaria C# - Mostrar los 8 dígitos

Convert.ToString(MyVeryOwnByte, 2); 

Pero cuando byte es tiene 0 de begining en aquellas 0 de están siendo excavados. Ejemplo:

MyVeryOwnByte = 00001110 // Texbox shows -> 1110 
MyVeryOwnByte = 01010101 // Texbox shows -> 1010101 
MyVeryOwnByte = 00000000 // Texbox shows -> <Empty> 
MyVeryOwnByte = 00000001 // Texbox shows -> 1 

Quiero mostrar los 8 dígitos.

+0

Ver: http://stackoverflow.com/questions/1644609/c-problem-with-byte y específicamente http://stackoverflow.com/questions/1644609/c-problem-with-byte/1644666#1644666 –

+0

Como el código en este la pregunta ya ha sido [malinterpretada por otro usuario] (http://stackoverflow.com/questions/22894695/preceding-0s-in-integer-value), se debe señalar que 'MyVeryOwnByte' no es en realidad un' byte' aquí, y eso (si ese es el código de C# real usado) los literales como '01010101' son * números * decimales (que solo consisten en ceros y unos); los bits reales de los bytes que componen esos números parecen bastante diferentes. –

+0

@ O.R.Mapper Es solo "pseudocódigo". – Hooch

Respuesta

62
Convert.ToString(MyVeryOwnByte, 2).PadLeft(8, '0'); 

Esto llenará el espacio vacío a la izquierda con '0' para un total de 8 caracteres en la cadena

1

cojín de la cadena de ceros. En este caso es PadLeft(length, characterToPadWith). Métodos de extensión muy útiles. PadRight() es otro método útil.

+1

'PadRight' es un método útil pero no en este escenario. Te recomiendo que elimines eso de tu respuesta (o añadas cualquier otro método .NET útil: sé cuál escogería: D). –

+1

Además, no son métodos de extensión. – Gabe

10

Cómo lo hace depende de cómo quiera que se vea su salida.

Si lo que desea es "00011011", utiliza una función como esta:

static string Pad(byte b) 
{ 
    return Convert.ToString(b, 2).PadLeft(8, '0'); 
} 

Si desea una salida como "000 ", utilizar una función como esta:

static string PadBold(byte b) 
{ 
    string bin = Convert.ToString(b, 2); 
    return new string('0', 8 - bin.Length) + "<b>" + bin + "</b>"; 
} 

Si desea una salida como "0001 1011", una función como esta podría ser mejor:

static string PadNibble(byte b) 
{ 
    return Int32.Parse(Convert.ToString(b, 2)).ToString("0000 0000"); 
} 
+0

@Jeff: Publiqué esta versión porque a veces la técnica 'new string()' es útil. No cuestionaste la mención de "PadRight" de Gregory, y esa función ni siquiera resuelve el problema. – Gabe

+0

Cómo reaccioné a la respuesta de otra persona es completamente irrelevante. Me pareció extraño ver que minimizas tu respuesta refiriéndome a una mejor solución que no ofreciste y que la sugerencia que recibiste no era particularmente fácil de leer. Como SO es un recurso para obtener una buena respuesta, sería mejor que incluyera la solución PadLeft por completo Y su alternativa: entonces podría ser la mejor respuesta. Esto no se trata de primero, es lo mejor. –

+0

@Jeff: prefiero una publicación separada para cada respuesta, de modo que se puedan navegar fácilmente las respuestas sin tener que pasar por los duplicados. Sin embargo, he hecho una excepción hoy, y solo para ti has puesto 3 respuestas en una sola publicación. – Gabe

Cuestiones relacionadas