2010-08-27 8 views
34

En C# je convertis un byte en binary, la réponse réelle est 00111111 mais le résultat donné est 111111. Maintenant, j'ai vraiment besoin d'afficher même les 2 0 devant. Quelqu'un peut-il me dire comment faire cela?Conversion d'un octet en chaîne binaire dans C#

J'utilise:

Convert.ToString(byteArray[20],2) 

et la valeur d'octet est 63

+0

similaire, mais en sens inverse: http://stackoverflow.com/questions/72176/using-c-what-is-the-most-efficient-method-of- convertissant-une-chaîne-contenant-bi –

Répondre

38

il suffit de changer votre code:

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

cette méthode fera toujours la chaîne avec 8 chiffres à droite? donc si j'obtiendrai une valeur différente par exemple 10001111 cela n'ajoutera pas de nouveaux 0s devant – IanCian

+3

@IanCian correct, peu importe ce qu'il y aura toujours 8 chiffres donc si vous les fournissez tous, le 'PadLeft' ne fera rien mais si vous Ne pas, il remplira l'espace gauche à gauche avec 0s. – Kelsey

+0

Vous avez raison - ma suggestion n'était pas correcte. Je ne l'ai pas testé. – Zach

0

Essayez celui-ci:

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 Je comprends bien, vous avez 20 v alues ​​que vous voulez convertir, donc c'est juste un simple changement de chapeau que vous avez écrit.

Pour changer un seul octet à la chaîne 8 char: Convert.ToString(x, 2).PadLeft(8, '0')

Pour changer gamme complète:

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 

Pour modifier votre tableau d'octets à chaîne unique, avec des octets séparés avec l'espace:

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 la commande d'octets est incorrecte, utiliser 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

essayez celui-ci

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