Преобразование байта в двоичную строку в c # - PullRequest
37 голосов
/ 27 августа 2010

В c # я конвертирую byte в binary, фактический ответ - 00111111, но получаемый результат - 111111. Теперь мне действительно нужно отобразить даже 2 0 перед. Может кто-нибудь сказать мне, как это сделать?

Я использую:

Convert.ToString(byteArray[20],2)

и значение байта составляет 63

Ответы [ 4 ]

43 голосов
/ 27 августа 2010

Просто измените свой код на:

string yourByteString = Convert.ToString(byteArray[20], 2).PadLeft(8, '0');
// produces "00111111"
20 голосов
/ 28 марта 2012

Если я правильно понимаю, у вас есть 20 значений, которые вы хотите преобразовать, так что это просто простая смена шапки, которую вы написали.

Чтобы изменить однобайтовую строку на 8 символов: Convert.ToString( x, 2 ).PadLeft( 8, '0' )

Чтобы изменить полный массив:

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

Чтобы изменить ваш байтовый массив на одну строку с байтами, разделенными пробелом:

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

если порядок байтов неправильный, используйте 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 голосов
/ 23 декабря 2015

попробуйте это

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();
    }
1 голос
/ 27 августа 2010

Попробуйте это:

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