将字节转换为二进制

时间:2010-09-05 16:32:06

标签: c# flv

我有FLV文件我将它存储到字节数组,我可以逐字节读取它。 我想将每个字节转换为二进制0和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;
}

4 个答案:

答案 0 :(得分:11)

如果你想要一个位串:

byte b = 100;

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

因此,在您的示例中,只需添加, 2

即可

第二个参数是您要使用的基础。

  • 2 =二进制(0 - 1)
  • 8 =八进制(0 - 7)
  • 16 = hex(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或类似的东西:-)(以你的方式连接文本是非常低效的。)

答案 1 :(得分:4)

最简单的方法是使用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对大文件非常有效,因此如果需要解码长文件,请使用位二进制算法。

答案 2 :(得分:1)

您可以在.net

中使用BitArray Class
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

答案 3 :(得分: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));
    }
}