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

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

8

所以二进制数据可能是不可打印的数据?如果您想将数据以十六进制字符串形式打印出来,请将数据作为字节数组处理,然后转换为十六进制表示。

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
这并不涵盖不同的进制和编码方式 - 这可能会因此导致一些麻烦。 - Random
2
@Random:但问题中没有指定任何内容。他只是说“二进制数据”,没有提到数据是否编码以及使用什么字符串表示来获取数据。因此,我将其解释为纯粹的不可打印数据,以十六进制字符串形式呈现。现在我们能做的就是猜测他的意思,直到他澄清为止。 - Jeff Mercado
@Liam:编码为什么?请明确您的确切要求。例如:“我想将二进制数据显示为它们的十六进制表示中的字节。”如果我们不知道您想要做什么,我们无法帮助您。 - Jeff Mercado

4

有不同的情况需要读取二进制文件,因为不清楚你真正想要实现什么,以下是一些例子:

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

3
使用BinaryReader来读取文件,然后将从文件中读取的字节数组以base64格式进行编码,并将base64编码字符串赋值给文本框。
更新:
从文件中读取的字节数组在分配到文本框以供显示之前可以使用各种文本编码进行编码。请查看与字符编码格式相关的以下 .net 类中的命名空间:
- System.Text.ASCIIEncoding - System.Text.UTF8Encoding - System.Text.UnicodeEncoding - System.Text.UTF32Encoding - System.Text.UTF7Encoding
在进行任何从字节数组到编码字符串的转换之前,请确保您知道目标文件的确切编码方式。或者,您可以检查文件的BOM字节。
更新(2):
请注意,您无法使用System.Text类将非文本文件(例如图像文件、音乐文件)进行转换。否则,在文本框中显示是毫无意义的。

我不否认获取base64字符串与任何其他方式一样好,它是有效的表示形式。但是,就我所知,你最近关于各种字符串编码的更新在这里并没有添加任何内容。这表明我们正在从文件中读取文本而不是原始二进制数据。 - Jeff Mercado
1
@Jeff M,这些信息对于初学者可能会有所帮助。此外,二进制文件可以是许多东西的复杂混合体。例如,在某个字节范围内,它是utf8文本值,在另一个范围内,它可能是图像的字节数组等等。 - Predator

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