2009-10-29 3 views
3

Я загружаю файл в байт []. По моему мнению, байт [] должен содержать определенные элементы байтов (8 бит). Когда я печатаю каждый байт, все они не являются 8-битными (т. Е. Они не имеют длины 8). Мой код:Проблема с C# с байтом []

FileStream stream = File.OpenRead(@"C:\Image\Img.jpg"); 
byte[] fileByte = new byte[stream.Length]; 
stream.Read(fileByte, 0, fileByte.Length); 

for (int i = 0; i <= fileByte.Length - 1; i++) 
{ 
    Console.WriteLine(Convert.ToString(fileByte[i], 2)); 
} 

Выход:

10001110 
11101011 
10001100 
1000111 
10011010 
10010011 
1001010 
11000000 
1001001 
100100 

Я думаю, что мое понимание здесь не так, Вы можете, пожалуйста, дайте мне знать (или предоставить мне некоторые учебник ссылки), где я пропускаю это.

+4

'Byte [] = данные File.ReadAllBytes (@ "FilePath.jpg");.' –

ответ

13

При преобразовании числа в строку вы теряете любые начальные нули. (Обратите внимание, что все ваши записи начинаются с "1"). Вы можете использовать PadLeft положить их обратно в

FileStream stream = File.OpenRead(@"C:\Image\Img.jpg"); 
    byte[] fileByte = new byte[stream.Length]; 
    stream.Read(fileByte, 0, fileByte.Length); 

    for (int i = 0; i <= fileByte.Length - 1; i++) 
    { 
     Console.WriteLine(Convert.ToString(fileByte[i], 2).PadLeft(8,'0')); 

    } 
+0

Спасибо, это та часть, которую мне не хватало. (У меня есть только неопределенное знание C#.) –

+0

Вместо PadLeft (8, Convert.ToChar («0»)), просто сделайте PadLeft (8, '0'). Нет смысла преобразовывать строку в char каждый раз. – Kevin

+0

Человек, вы все избили меня до ответа, потому что я нашел время, чтобы написать и проверить «исправление» кода ». Тем не менее, + всем, кто правильно ответил. – David

18

Ведущие 0 не печатаются.

+0

Удивительно, вся «любовь», которую вы получаете от этого простого ответа ... (без ревности с моей стороны, вы избили нас все время мудрыми, плюс мне 200 на день), но разве это не смешно, когда мы получить так много повторений за эти простые вопросы? – mjv

+0

@mvj - Не шутите! Но я ревную. Но достаточно большой, чтобы справиться с этим. (Гринь). – David

+0

@mjv Мои ответы на самые высокие ответы обычно были самыми легкими для ответа. Вопросы, связанные с специализированными знаниями, множеством ссылок и т. Д., Редко получают больше, чем несколько голосов, потому что мало кто действительно знает, правильный ответ или нет. Вероятно, то же самое для mmyers, и я уверен, что он счастлив взять репутацию, даже если это для простой. –

3

Это просто, что ведущие нули не включены ...

2

ли байты без ведущих нулей? Вы выбрали плохой пример, потому что мы не знаем десятичных значений, которые вы показываете (хорошо, может быть, тот, кто знает структуру заголовка для файла .jpg). Я готов поспорить, что ведущие нули не отображаются в двоичных эквивалентах.

4

Все они имеют 8 бит, но незначительные нули (нули слева) не печатаются.

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