在C#中将文件转换为二进制

9
我正在尝试编写一个通过声音传输文件的程序(类似于传真)。我将程序分为以下几个步骤:
  1. 将文件转换为二进制
  2. 将1转换为特定的频率,将0转换为另一种
  3. 播放这些音调到另一台电脑
  4. 其他电脑听取音调
  5. 其他电脑将音调转换成二进制
  6. 其他电脑将二进制转换为文件。
但是,我似乎找不到将文件转换为二进制的方法。我发现了一种将字符串转换为二进制的方法...
public static string StringToBinary(string data)
{
    StringBuilder sb = new StringBuilder();
    foreach (char c in data.ToCharArray())
    {
        sb.Append(Convert.ToString(c, 2).PadLeft(8,'0'));
    }
    return sb.ToString();
}

来自http://www.fluxbytes.com/csharp/convert-string-to-binary-and-binary-to-string-in-c/。 但我找不到如何将文件转换为二进制(文件可以是任何扩展名)。

那么,如何将文件转换为二进制?有没有更好的方法编写程序呢?


1
为什么不以二进制模式打开文件? - Ashkan Mobayen Khiabani
2
看起来Ashkan已经为你回答了。这是一个很酷的项目概念,加一分。 - CodeChops
1
所有文件都是二进制的。 - H H
1
只是好奇,这个有什么应用? - Charleh
1个回答

16

为什么不直接以二进制模式打开文件?这个函数以二进制模式打开文件并返回字节数组:

private byte[] GetBinaryFile(filename)
{
     byte[] bytes;
     using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
     {
          bytes = new byte[file.Length];
          file.Read(bytes, 0, (int)file.Length);
     }
     return bytes;
}

然后将其转换为比特位:

byte[] bytes = GetBinaryFile("filename.bin");
BitArray bits = new BitArray(bytes);

现在bits变量包含了您想要的0和1。

或者你可以这样做:

private BitArray GetFileBits(filename)
{
     byte[] bytes;
     using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
     {
          bytes = new byte[file.Length];
          file.Read(bytes, 0, (int)file.Length);
     }
     return new BitArray(bytes);
}

甚至更短的代码可以是:

   private BitArray GetFileBits(filename)
    {
         byte[] bytes = File.ReadAllBytes(filename);
         return new BitArray(bytes);
    }

我这样做了,得到了一个由1到255(一个字节)之间的数字组成的数组,那么我应该将每个数字转换为二进制并在左侧添加尽可能多的零,使其长度为8位,还有其他方法吗? - Daniel
@Daniel 我刚写的那个函数只需要文件名,然后给你返回了0和1。 - Ashkan Mobayen Khiabani
1
谢谢,这正是我在寻找的。 - Daniel
如何找回我的文件 - Muhammad Usama Alam
1
@clamum 没有太大的区别,因为ReadAllBytes本身使用流来读取数据,不过我总是使用ReadAllBytes,因为它更容易。 - Ashkan Mobayen Khiabani
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接