在C#中解析二进制文件

时间:2009-12-01 07:05:31

标签: c# parsing binaryfiles

我有一个二进制文件。我将它存储在字节数组中。文件大小可以是20MB或更多。然后我想解析或找到文件中的特定值。我通过两种方式做到这一点 - >   1.通过转换char数组中的完整文件。   2.通过十六进制字符串转换完整文件。(我也有十六进制值)

什么是解析完整文件的最佳方法..或者我应该以二进制形式进行。我正在使用vs-2005。

3 个答案:

答案 0 :(得分:0)

从内存消耗方面来说,最好能直接解析它。

将它转换为C#中的char数组意味着有效地将其在内存中的大小加倍(假设您将每个byte转换为char),而十六进制字符串将至少占用大小的4倍( C#字符是16位unicode字符。)

另一方面,您需要反复进行多次搜索和解析现有数据集,您可以从任何更好地存储的形式中获益。

答案 1 :(得分:0)

什么阻止你在字节[]中进行搜索? 恕我直言,如果您只是搜索指定值的字节或几个连续字节,这是最简单的方法和最有效的方法。

答案 2 :(得分:0)

如果我正确理解了您的问题,您需要找到可以包含大型二进制文件中任何字符的字符串。二进制文件是否包含文本?如果是这样,你知道编码吗?如果是这样,您可以像这样使用StreamReader类:

using (StreamReader sr = new StreamReader("C:\test.dat", System.Text.Encoding.UTF8))
{
    string s = sr.ReadLine();
}

在任何情况下,我认为使用某种流访问文件更有效,而不是将其全部加载到内存中。 您可以通过块将其加载到内存中,然后使用一些模式匹配算法(如Knuth-Moris-Pratt或Karp-Rabin)