【问题标题】:How do you read binary data in C# .NET and then convert it to a string?如何在 C# .NET 中读取二进制数据,然后将其转换为字符串?
【发布时间】:2011-07-24 04:12:16
【问题描述】:

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

【问题讨论】:

    标签: c# file binary stream binary-data


    【解决方案1】:

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

    更新:

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

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

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

    更新(2):

    请注意,您不能使用任何 System.Text 类转换非文本文件(例如图像文件、音乐文件)。否则在文本框中显示对您来说毫无意义。

    【讨论】:

    • 我不否认获取 base64 字符串和任何字符串一样好,它是一种有效的表示形式。但是您最近关于各种字符串编码的更新并没有在 AFAIK 中添加任何内容。这表明我们正在从文件中读取文本,而不是原始二进制文件。
    • @Jeff M,该信息可能对初学者有帮助。另外,二进制文件可能是许多东西的复杂混合。例如,在某个字节范围内,它是 utf8 文本值,而在另一个范围内,它可以是图像的字节数组等。
    【解决方案2】:

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

    • 读取随机文件并显示为一系列十六进制值(类似于 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

    【讨论】:

      【解决方案3】:

      那么二进制数据和潜在的不可打印数据一样吗?好吧,如果您想将数据打印为十六进制字符串,请将数据作为字节数组,然后转换为十六进制表示。

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

      【讨论】:

      • 这不包括不同的基础和编码——因此可能会引起一些麻烦。
      • @Random:但问题中没有指定任何内容。他所说的只是“二进制数据”,没有提到数据是否经过编码或以何种字符串表示形式获得。所以我将其解释为普通的、不可打印的数据作为十六进制字符串。我们现在所能做的就是猜测他的意思,直到他澄清为止。
      • @Liam:编码成什么?指定您的确切要求。类似于:“我想将二进制数据显示为十六进制表示中的字节。”如果我们不确切知道您想要做什么,我们将无法帮助您。
      猜你喜欢
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2023-03-19
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多