繁体   English   中英

将字节转换为字符串C#

[英]converting bytes to a string 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秒。 我注意到记事本在更短的时间内完成了相同的工作。 关于如何做的任何想法?

谢谢

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

textBox1.Text = Convert.ToBase64String(byteArray);

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

这里有四件重要的事情要点:

  • 不要将任意二进制数据视为特定编码中的有效文本。 Phil Haack 最近在一篇博客文章中写到了这一点 ,以回应我的一些SO答案。
  • 不要在循环中执行字符串连接 ; 如果你想用很多位创建一个最终的字符串,并且你事先不知道多少位,请使用StringBuilder
  • 不要在循环中不必要地使用UI属性 - 即使前面的步骤没问题,最好用循环构造字符串然后对Text属性进行单个赋值
  • 了解System.Text.Encoding ,了解您真正编码文本的情况; 如果这是UTF-8编码的数据, 那么 Encoding.UTF8.GetString(byteArray)就是合适的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM