将字节转换为字符串C#

时间:2012-02-10 15:34:34

标签: c#

我想将二进制文件转换为字符串,然后可以将其转换回二进制文件。 我试过这个:

byte[] byteArray = File.ReadAllBytes(@"D:\pic.png");
for (int i = 0; i < byteArray.Length; i++)
{
    textBox1.Text += (char)byteArray[i];
}

但速度太慢,在i5 CPU上转换5KB大约需要20秒。 我注意到记事本在更短的时间内完成了相同的工作。 关于如何做的任何想法?

由于

1 个答案:

答案 0 :(得分:16)

如果您希望能够在不丢失任何信息的情况下转换回二进制文件,那么您根本不应该做这类事情 - 您应该使用base64编码或类似的东西:

textBox1.Text = Convert.ToBase64String(byteArray);

然后您可以使用byte[] data = Convert.FromBase64String(text);转换回来。重要的是base64将任意二进制数据转换为已知的ASCII文本;所有字节序列都有效,所有字节序列都可以往返,因为它只需要ASCII,它对许多传输都很友好。

这里有四个重要的事情:

  • 不要将任意二进制数据视为特定编码中的有效文本。 Phil Haack wrote about this in a blog post recently,回应了我的一些答案。
  • Don't perform string concatenation in a loop;如果你想用大量的比特创建一个最后的字符串,并且你不知道提前有多少比特,那就使用StringBuilder
  • 不要在循环中不必要地使用UI属性 - 即使前面的步骤没问题,最好用循环构造字符串然后对{进行单个赋值{1}}属性
  • 了解System.Text.Encoding您真正拥有编码文字的情况; Text本来是合适的如果这是UTF-8编码的数据,例如