web-dev-qa-db-fra.com

Conversion d'un octet en une chaîne binaire en c #

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?

J'utilise:

Convert.ToString(byteArray[20],2)

et la valeur d'octet est 63

38
IanCian

Changez simplement votre code en:

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

Si je comprends bien, vous avez 20 valeurs que vous souhaitez convertir, il ne s'agit donc que d'un simple changement de chapeau que vous avez écrit.

Pour changer un octet unique en une chaîne de 8 caractères: Convert.ToString( x, 2 ).PadLeft( 8, '0' )

Pour changer le tableau complet:

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 changer votre tableau d'octets en chaîne unique, avec des octets séparés par de 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 l'ordre des octets est incorrect, utilisez 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
20
Soul Reaver

essaye celui-là

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();
    }
2
Mahmoud El-baz

Essaye celui-là:

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