2014-11-10 6 views
0

Я пытаюсь преобразовать массив байтов в строку в двоичном формате, но Convert.ToString() возвращает неожиданные результаты. Не могли бы вы рассказать мне, что я делаю неправильно? Вот код:C# преобразование байтового массива в строку

class Program 
{ 
    static void Main(string[] args) 
    { 
     StringBuilder str = new StringBuilder(); 
     byte[] x = { 0xB1, 0x53, 0x63 }; 
     for (int i = 0; i < 3; i++) 
     { 
      str.Append(Convert.ToString(x[i], 2)); 
     } 
     Console.WriteLine(str); 
     Console.ReadLine(); 
    } 
} 

Выход:


Я ожидал, что выход будет:

1011_0001_0101_0011_0110_0011 (0xB15363)

И не:

1011_0001_1010_0111_1000_11

+0

ты гугле это также 'SO' есть несколько примеров, а также HTTP://stackoverflow.com/questions/11654562/how-convert-byte-array-to-string – MethodMan

+2

Я не совсем понимаю вопрос. Вы действительно ожидали, что там будут подчеркивания? Если нет, пожалуйста, не затрудняйте вопрос, предоставив что-то иное, чем ожидаемый вывод _actual_ literal, который был выведен. –

+0

Нет, я не ожидал, что вывод будет содержать символы подчеркивания, я хотел бы облегчить чтение – Cristi

ответ

3

Если панель с нулями вы получите ответ

public static void Main() 
{   
    StringBuilder str = new StringBuilder(); 
    byte[] x = { 0xB1, 0x53, 0x63 }; 
    for (int i = 0; i < 3; i++) 
    { 
     str.Append(Convert.ToString(x[i], 2).PadLeft(8, '0')); 
    } 
    Console.WriteLine(str); 
    Console.ReadLine(); 
} 

Fiddle

2

Вы на самом деле просто не получить ведущие нули.

01010011 будет только 1010011.

Вы должны добавить ведущие нули любым из возможных методов (Convert.ToString, похоже, не нуждался в перегрузке). PadLeft упоминается в других ответах, добавив, что new string('0', 8 - s.Length) будет делать (но requires a temporary).

+0

@DJKRAZE: Это отвечает на вопрос «что я делаю неправильно». – Vlad

+0

Перед тем, как вы его отредактировали, у вас только что возник вопрос, а не кодированные результаты. – MethodMan

+0

Не могу не думать, что решение проблемы может быть немного больше, чем в случае с сайтом ... Хотя другие ответы все равно так или иначе. – Chris

3

Попробуйте

str.Append(Convert.ToString(x[i], 2).PadLeft(8, '0')); 
+0

Спасибо! Я попробую это – Cristi

+0

@Cristi Как сказал ** Влад **, проблема в том, что нет ведущих нулей. Это легко увидеть, добавив лишнее пространство между числами. – AlexD

Смежные вопросы