我想在二进制文件中搜索文本。
假设我想找一个单词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);
}
此致
伊戈尔
答案 0 :(得分:4)
尝试从二进制数据中读取字符串是一种会导致问题的方法(因为并非所有二进制数据都可以转换为有意义的文本形式)。最好弄清楚二进制字节序列将用于表示文本,并在文件的二进制文件中搜索该二进制数据。
字符串可以以多种不同的形式存储。假设字符串是原始存储的(未压缩和未加密),那么您只需要知道所使用的编码(例如,它们是8位ASCII字符还是16位UNICODE字符?)
如果您知道编码,则可以使用.net中Encoding.GetBytes的许多覆盖之一将C#字符串转换为二进制表示形式。例如,如果要查找ASCII字符串“SEQUENCE”,那么可以使用
生成您要查找的字节序列。byte[] binary = System.Text.ASCIIEncoding.ASCII.GetBytes("SEQUENCE");
然后,您可以在文件中搜索此二进制文件。一种简单的暴力方法是从文件中读取字节(即Stream.ReadByte
)并将它们与这个“二进制”字节数组进行比较,以查看是否可以找到匹配项。 (通过最小化您需要读取和比较的字节数,您可以使用一些聪明的算法来更快更有效地执行此操作,缓冲/缓存策略可以显着提高I / O的性能,但我建议您获得在你担心性能改进之前工作的东西)
答案 1 :(得分:0)
您可以使用 System.Text 命名空间中的 ASCII.GetString()函数从字节数组中读取字符串。