Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将二进制文件转换为文本,然后进行搜索_C# - Fatal编程技术网

C#将二进制文件转换为文本,然后进行搜索

C#将二进制文件转换为文本,然后进行搜索,c#,C#,我想在二进制文件中搜索文本 假设我想找到一个单词序列 我试过使用二进制读取器,但运气不好。我无法从二进制文件中提取文本 我当前的代码如下所示: txtSource.Text = string.Empty; DialogResult result = openFileDialog1.ShowDialog(); try { if (result == DialogResult.OK) { txtFile.Text = openFileDialog1.FileName;

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

假设我想找到一个单词
序列

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

我当前的代码如下所示:

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);
      }
问候,


Igor

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

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

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

如果知道编码,可以使用.net中的许多重写之一将C#字符串转换为二进制表示。例如,如果要查找ASCII字符串“SEQUENCE”,则可以使用

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

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

不是所有文件都是某种级别的二进制文件吗?或者UTF8.GetString()。或Unicode.GetString()。或UTF32.GetString()。或UTF7.GetString()。他没有提到他的名字,我只是从档案中得到第一个字。数字后的文本。。。没有显示。