如何解释二进制文件的二进制文件

How to Interpret Binary a Binary File

我有一个二进制文件,我想打开、阅读和理解它;但我以前从未尝试过使用二进制信息。

各种问题(包括Using structs in C# to read dataHow to read a binary file using c#?) 帮助我打开并阅读文件,但我不知道如何解释我目前提取的信息。

我从中得到一些有希望的数据的一种方法是:

using (BinaryReader reader = new BinaryReader(File.Open(filename, FileMode.Open, FileAccess.Read)))
{
    for (int i = 0; i < 100; i++)
    {
        iValue = reader.ReadInt32();
        sb.AppendFormat("{1}={2}{0}", Environment.NewLine, i, iValue);
    }
}

Returns 像这样:

0=374014592
1=671183229
2=558694987
3=-1018526206
4=1414798970
5=650
6=4718677
7=44
8=0
9=7077888
10=7864460

但这不是我所期待的,我什至不知道这意味着什么 - 我是否成功确定文件包含一堆数字,或者我正在查看数据的解释(类似于如何使用wrong/different 编码将 return 相同输入的不同字符)。

我还有希望还是应该完全停止?

您必须已经知道二进制文件的结构才能正确读取和解释文件。

例如,如果您向二进制文件写入一个 int、一个双精度数、一个布尔值和一个字符串,如下所示:

 int i = 25;
 double d = 3.14157;
 bool b = true;
 string s = "I am happy";    

using (var bw = new BinaryWriter(new FileStream("mydata", FileMode.Create))
{           
    bw.Write(i);
    bw.Write(d);
    bw.Write(b);
    bw.Write(s);
}

然后您必须稍后使用相同的类型以完全相同的顺序读回数据值:

using (var br = new BinaryReader(new FileStream("mydata", FileMode.Open)))
{
    i = br.ReadInt32();
    Console.WriteLine("Integer data: {0}", i);
    d = br.ReadDouble();
    Console.WriteLine("Double data: {0}", d);
    b = br.ReadBoolean();
    Console.WriteLine("Boolean data: {0}", b);
    s = br.ReadString();
    Console.WriteLine("String data: {0}", s);
}

http://www.tutorialspoint.com/csharp/csharp_binary_files.htm

要成功读取 .WAV 文件(一种保存声音信息的二进制文件格式),您需要了解这些信息。 WAV 文件是一种更简单的二进制格式:

http://soundfile.sapp.org/doc/WaveFormat/

根据定义,二进制文件只是一系列位。您是否将这些位解释为数字、字符或其他内容完全取决于首先写入文件的内容。

通常无法通过查看文件内容来判断文件中写入了什么。当然,如果您将这些位解释为字符并获得可读文本,那么文本很可能就是写入文件的内容。但是仅包含文本的文件通常不会被描述为二进制文件。

通过调用 ReadInt32,您假设文件的内容是一系列四字节整数。但是,如果将八字节整数或浮点数或枚举或其他内容写入您的文件怎么办?如果您的文件不包含四个字节的倍数怎么办?

您可能会考虑将循环更改为使用 ReadByte 而不是 ReadInt32,因此它可能看起来像这样...

bValue = reader.ReadByte();
sb.AppendFormat("{1}=0x{2:X}{0}", Environment.NewLine, i, bValue);

因此您将文件视为字节序列并以十六进制而不是十进制数写出数据。

另一种方法可能是找到一个好的十六进制编辑器并使用它来检查文件内容,而不是编写自己的代码(至少开始时是这样)。

Visual Studio 中内置了一个简单的十六进制编辑器(假设您正在使用它)。转到 文件 | 打开 | 打开文件。然后在“打开文件”对话框中 select 您的二进制文件,然后单击“打开”按钮右侧的下拉菜单和 select 打开方式 然后 select 二进制编辑器.

您将看到的是以十六进制和字符形式显示的文件内容。不是很好但很快。