-2

我想在二进制文件中搜索文本。

假设我想找一个词SEQUENCE

我尝试过使用二进制阅读器,但没有运气。我无法从二进制文件中提取文本。

我当前的代码如下所示:

txtSource.Text = string.Empty;
DialogResult result = openFileDialog1.ShowDialog();

try
{
   if (result == DialogResult.OK)
   {
      txtFile.Text = openFileDialog1.FileName;

      string s;

      using (FileStream fs = new FileStream(txtFile.Text, FileMode.Open))
      using (BinaryReader br = new BinaryReader(fs))
      {
          byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
          txtSource.Text = Convert.ToBase64String(bin);
      }

问候,

伊戈尔

4

2 回答 2

4

尝试从二进制数据中读取字符串是一种会导致问题的方法(因为并非所有二进制数据都可以转换为有意义的文本形式)。最好弄清楚将使用什么二进制字节序列来表示文本,并在文件的二进制文件中搜索该二进制数据。

字符串可以以多种不同的形式存储。假设字符串是原始存储的(未压缩和未加密),那么您只需要知道使用的编码(例如,它们是 8 位 ASCII 字符还是 16 位 UNICODE 字符?)

如果您知道编码,则可以使用.net中Encoding.GetBytes的众多覆盖之一将 C# 字符串转换为二进制表示。例如,如果您要查找 ASCII 字符串“SEQUENCE”,则可以使用生成您要查找的字节序列

byte[] binary = System.Text.ASCIIEncoding.ASCII.GetBytes("SEQUENCE");

然后,您可以在文件中搜索此二进制文件。一个简单的蛮力方法是从文件中读取字节(即Stream.ReadByte)并将它们与这个“二进制”字节数组进行比较,看看是否可以找到匹配项。(有一些聪明的算法可以通过最小化需要读取和比较的字节数来更快、更有效地做到这一点,缓冲/缓存策略可以显着提高所涉及的 I/O 的性能,但我建议你得到在您担心性能改进之前有些工作)

于 2013-04-13T20:53:55.737 回答
0

您可以使用System.Text命名空间中的ASCII.GetString()函数从字节数组中读取字符串。

于 2013-04-13T20:33:39.317 回答