我可以直接在C#中将存储为字符串的二进制文件写入二进制文件吗?

我可以直接在C#中将存储为字符串的二进制文件写入二进制文件吗?,c#,.net,io,binary,filesystems,C#,.net,Io,Binary,Filesystems,这是我遇到的一个有点奇怪的问题。我正在.NET平台上使用C#6进行二进制压缩算法。多阶段的压缩效果非常好,甚至比预期的要好得多!然而,将未优化的二进制文件转换回文件比我预期的更令人头痛 案件 二进制文件从任意文件中读取,并作为字符串在程序中传递。对字符串进行多次优化,将其转换为中间表示形式,并将其作为压缩对象写入。然后,去优化将中间形式转换回纯二进制,以便编写 代码 二进制输入 这就是我接受输入的方式。它将以1100101011001 从intermeidate形式转换返回完全相同的字符串 二元

这是我遇到的一个有点奇怪的问题。我正在.NET平台上使用C#6进行二进制压缩算法。多阶段的压缩效果非常好,甚至比预期的要好得多!然而,将未优化的二进制文件转换回文件比我预期的更令人头痛

案件 二进制文件从任意文件中读取,并作为字符串在程序中传递。对字符串进行多次优化,将其转换为中间表示形式,并将其作为压缩对象写入。然后,去优化将中间形式转换回纯二进制,以便编写

代码 二进制输入 这就是我接受输入的方式。它将以
1100101011001

从intermeidate形式转换返回完全相同的字符串

二元的 输出当前,我尝试直接将二进制文件写入字节,例如:

List<Byte> bytes = new List<byte>();
foreach(char c in binary)
   bytes.Add(Convert.ToByte(c));
File.WriteAllBytes(filename, bytes.ToArray());
List bytes=新列表();
foreach(二进制字符c)
Add(Convert.ToByte(c));
File.writealBytes(文件名,bytes.ToArray());
问题 我现在尝试的二进制输出方法只是将二进制直接写入文本文件,而不是将二进制对象写入文件系统

我们正在压缩图片、可执行文件、文本、git对象等。因此,以这种方式编写显然是不可行的


C#/.NET中是否有一种方法可以让我轻松地将二进制文件转换回文件,或者这是一个比我想象的更复杂的问题?

一个字节中有8位,但您试图一次将1位转换为一个字节。您需要首先收集8位,然后使用接受
fromBase
的重载将其转换为字节:

替换此代码:

// Note: I assume you meant to reference `BinaryString` here
// and not "binary" which isn't defined in your example
foreach(char c in BinaryString)
   bytes.Add(Convert.ToByte(c));
为此:

var thisByte = string.Empty;
foreach (char c in BinaryString)
{
    thisByte += c;
    if (thisByte.Length == 8)
    {
        bytes.Add(Convert.ToByte(thisByte, 2));
        thisByte = string.Empty;
    }
}

首先,为什么要将二进制数据转换为字符串,而不只是将数据作为字节处理?^^^请参见上面的注释二进制数据通常具有与数据相关联的格式。你就是不能读写数据。例如,如果您编写一个32位整数,两个8位字节。当您读取数据时,您必须读取相同大小的数据。因此,当你写二进制代码时,你必须以与写二进制代码完全相同的方式将其读回。我建议你重写所有处理“二进制字符串”的代码,以处理原始字节。我可以想象这会带来巨大的性能提升。由于压缩本身的工作方式,算法不可能处理字节而不是字符串,至少在输出方面是这样。将其存储为文本是该算法的一个重要特征。所以,让算法可行是完全站不住脚的?
var thisByte = string.Empty;
foreach (char c in BinaryString)
{
    thisByte += c;
    if (thisByte.Length == 8)
    {
        bytes.Add(Convert.ToByte(thisByte, 2));
        thisByte = string.Empty;
    }
}