我有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;
}
答案 0 :(得分:11)
如果你想要一个位串:
byte b = 100;
//Will be "1100100"
var bitstring = Convert.ToString(b, 2);
因此,在您的示例中,只需添加, 2
第二个参数是您要使用的基础。
和二级,我对你的代码有一点改进:)这样做:
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 Classbyte[] 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));
}
}