我有一个二进制文件,我想打开,阅读和理解;但我以前从未试图使用二进制信息 .
各种问题(包括Using structs in C# to read data和How 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);
}
}
返回如下内容:
0=374014592
1=671183229
2=558694987
3=-1018526206
4=1414798970
5=650
6=4718677
7=44
8=0
9=7077888
10=7864460
但这不是我所期待的,我甚至不知道它意味着什么 - 我成功确定该文件包含一堆数字还是我在看数据的解释(类似于使用错误/不同编码的方式)将为同一输入返回不同的字符) .
我有希望还是应该完全停止?
2 回答
您必须已经知道二进制文件的结构,以便能够正确读取和解释文件 .
例如,如果你写一个二进制文件int,double,boolean和string,如下所示:
那么你必须稍后使用相同的类型读回数据值,顺序完全相同:
http://www.tutorialspoint.com/csharp/csharp_binary_files.htm
以下是您需要知道的能够成功读取.WAV文件(包含声音信息的二进制文件格式) . WAV文件是更简单的二进制格式之一:
http://soundfile.sapp.org/doc/WaveFormat/
根据定义,二进制文件只是一系列位 . 是否将这些位解释为数字,字符或其他内容完全取决于首先写入文件的内容 .
通常,无法通过查看文件内容来判断写入文件的内容 . 当然,如果您将这些位解释为字符并获得可读文本,那么文本很可能是写入文件的内容 . 但是,通常不会将仅包含文本的文件描述为二进制文件 .
通过调用ReadInt32,您假设文件的内容是一系列四字节整数 . 但是,如果将八字节整数或浮点数或枚举或其他内容写入您的文件,该怎么办?如果您的文件不包含四个字节的倍数怎么办?
您可能会考虑更改循环以使用ReadByte而不是ReadInt32,因此它可能看起来像这样......
所以你将文件视为一个字节序列,并以十六进制而不是十进制数字写出数据 .
另一种方法可能是找到一个好的十六进制编辑器,并使用它来检查文件内容而不是编写自己的代码(至少开始) .
Visual Studio中内置了一个简单的十六进制编辑器(假设您正在使用它) . 转到 File | Open | Open File . 然后在“打开文件”对话框中选择二进制文件,然后单击“打开”按钮右侧的下拉菜单并选择 Open With ,然后选择 Binary Editor .
您将看到的文件内容显示为十六进制和字符 . 不是很好,但很快 .