преобразовать байт в двоичный - PullRequest
2 голосов
/ 05 сентября 2010

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

Я хочу преобразовать переменную 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;
}

Ответы [ 4 ]

11 голосов
/ 05 сентября 2010

Если вам нужна битовая строка:

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 или аналогичный :-) (совершенно неэффективно объединять текст так, как вы это делаете.)

4 голосов
/ 05 сентября 2010

Самый простой способ - использовать класс 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 голос
/ 05 сентября 2010

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

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));
    }
}
1 голос
/ 05 сентября 2010

Вы можете использовать класс BitArray в .net

byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
   BitArray myBA3 = new BitArray( myBytes );

для получения дополнительной информации см. Ниже сообщение

http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx

...