如何在C#.NET中读取二进制数据,然后将其转换为字符串?

时间:2011-03-28 02:53:33

标签: c# file binary stream binary-data

与使用StreamReader/Filestream相反,我想从文件中读取二进制数据,并在文本框中显示数据(格式化)。

3 个答案:

答案 0 :(得分:7)

二进制数据如同可能不可打印的数据一样?好吧,如果您想以十六进制字符串形式打印数据,请将数据作为字节数组,然后转换为十六进制表示。

string path = @"path\to\my\file";
byte[] data = File.ReadAllBytes(path);
string dataString = String.Concat(data.Select(b => b.ToString("x2")));
textBox.Text = dataString;

答案 1 :(得分:4)

当需要读取二进制文件时,有不同的情况,因为目前还不清楚你真正想要实现的是:

  • 读取随机文件并显示为一系列十六进制值(类似于Visual Studio中的二进制文件视图或任何其他二进制文件查看器)。 Jeff M的回答完全涵盖了这一点。
  • 使用二进制序列化读取和编写自己的对象。检查MSDN上的序列化演练 - http://msdn.microsoft.com/en-us/library/et91as27.aspx并阅读BinaryFormatter对象。
  • 阅读别人的二进制格式(如JPEG,PNG,ZIP,PDF)。在这种情况下,您需要知道文件的结构(您经常可以找到文件格式文档)并使用BinaryReader来读取文件的各个块。对于大多数常见文件格式,很容易找到允许以更方便的方式读取此类文件的现有库。关于BinaryReader的MSDN文章也有基本用法示例:http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx

答案 2 :(得分:3)

使用BinaryReader读取文件。然后编码以base64格式从文件读取的字节数组,并在文本框中分配base64编码的字符串

更新:

从文件读取的字节数组可以在分配给文本框进行显示之前以各种文本编码进行编码。请查看.net类中与字符编码格式相关的以下命名空间:

  • System.Text.ASCIIEncoding
  • System.Text.UTF8Encoding
  • System.Text.UnicodeEncoding
  • System.Text.UTF32Encoding
  • System.Text.UTF7Encoding

在进行从字节数组到编码字符串的任何转换之前,请确保您知道目标文件的确切编码。或者您可以检查文件BOM字节。

更新(2):

请注意,您无法使用任何System.Text类转换非文本文件(例如图像文件,音乐文件)。否则,您无需在文本框中显示。