2010-09-05 6 views
2

У меня есть файл FLV Я сохранил его в байтовый массив, и я могу прочитать его байтом по байту. Я хочу преобразовать каждый байт в двоичный 0s и 1sпреобразовать байт в двоичный

Я хочу преобразовать переменную b в двоичный 1s 0s. например, если b = 70, как преобразовать его в двоичный код

какую функцию я могу использовать в C# для этого?

вот мой код для чтения FLV-файла и хранения его байтового массива.

byte[] myArray = System.IO.File.ReadAllBytes(@"myFlvFile.flv"); 

int r = 0; 
foreach (var b in myArray) 
{ 
    r += 1; 
    txtBit.Text = Environment.NewLine + Convert.ToString(b); 

    if (r == 50) 
    return; 
} 
+2

Есть 8 бит в байте, поэтому вы не можете преобразовать байт в бит, не теряя большую часть информации. Можете ли вы опубликовать _примеры того, чего вы хотите достичь? – Oded

+0

Что вы подразумеваете под «двоичным»? Строка, содержащая двоичное представление этого байта? – svick

+1

Я хочу преобразовать переменную b в двоичный 1s 0s. например, если b = 70, как преобразовать его в двоичный. – Eyla

ответ

11

Если вы хотите битовую строку:

byte b = 100; 

//Will be "1100100" 
var bitstring = Convert.ToString(b, 2); 

так в вашем примере, просто добавить , 2

Второй аргумент является базой вы хотите использовать.

  • 2 = двоичное (0 - 1)
  • 8 = восьмеричной (0 - 7)
  • 16 = гекс (0 - F)

и вторичного, у меня есть небольшое улучшение на вашем коде :) это будет делать:

byte[] myArray = System.IO.File.ReadAllBytes(@"myFlvFile.flv"); 

for (r = 0; r < 50; r++) 
{ 
    txtBit.Text = Environment.NewLine + Convert.ToString(myArray[r], 2); 
    //Or if you want to append instead of replace? (I think you do, but that is not what your code do) 
    txtBit.Text += Environment.NewLine + Convert.ToString(myArray[r], 2); 
} 

есть еще вещи, чтобы улучшить - вы можете посмотреть на StringBuilder или подобный :-) (это довольно ineff icient, чтобы объединить текст так, как вы это делаете.)

+0

@Timwi Спасибо за исправление моего ошибочного кода ('b' должно быть' myArray [r] ') :) –

3

Самый простой способ - использовать класс BitArray.

byte[] bytes = System.IO.File.ReadAllBytes(@"C:\yourfile.flv"); 
BitArray bits = new BitArray(bytes); 

for (int counter = 0; counter < bits.Length; counter++) 
{ 
    Console.Write(bits[counter] ? "1" : "0"); 
    if ((counter + 1) % 8 == 0) 
     Console.WriteLine(); 
} 

и вы получите что-то вроде этого:

10000110 
10110110 
00001110 
01011100 
00000100 
00001100 

Очевидно, что использование BitArray весьма неэффективен для больших файлов, так что если вам нужно декодировать длинные файлы, использование битовой двоичную арифметики.

1

Попробуйте что-то вроде этого примера программы:

class Program 
{ 
    static void Main(string[] args) 
    { 
     const string filename = @"D:\Temp\dcs_0002.jpg"; 

     var fileBytes = File.ReadAllBytes(filename); 
     var value = BytesAsBinaryString(fileBytes, 50); 

     Console.WriteLine(value); 
    } 

    public static string BytesAsBinaryString(IEnumerable<byte> bytes, int howMany) 
    { 
     var binaryStrings = from b in bytes 
         select Convert.ToString(b, 2); 
     return String.Join(Environment.NewLine, binaryStrings.Take(howMany)); 
    } 
} 
Смежные вопросы