十六进制值查找c#

本文关键字:查找 十六进制 | 更新日期: 2023-09-27 18:14:51

我试图在文件内搜索十六进制值,如果该值存在,我需要从该位置复制16个字节的char。我正在尝试在c#中做同样的事情。

请在下面找到我试过的代码,更正将不胜感激。

BinaryReader bw = new BinaryReader(File.OpenRead(filepath));
byte[] bc = { 0xa0, 0x00, 0x00, 0x03 };
for (int i = 0; i < br.BaseStream.Length-10;i++)
{
if (bw.ReadUInt32() == 0xa00003)
{
    Console.WriteLine("Found @ {0}", i);
}
bw.Close();

我得到如下错误:

类型为'System.IO.EndOfStreamException'的未处理异常发生在mscorlib.dll

附加信息:无法读取超出流末尾的内容。

十六进制值查找c#

这个错误是由于您的for循环的步长等于1,并且您一次读取4个字节。读取后,流位置向前移动4。将for循环更改为以下循环:

for (int i = 0; i < br.BaseStream.Length - 10; i += 4)
{
    //...
}
编辑:

如果您想在每个位置搜索而不每次跳过4个字节,请使用以下代码:

    Stream f = File.OpenRead(fileName);
    BinaryReader br = new BinaryReader(f);
    for (int i = 0; i < f.Length - 10; i++)
    {
        f.Seek(i, SeekOrigin.Begin);
        if (br.ReadUInt32() == 0xa00003)
        {
            Console.WriteLine("Found @ {0}", i);
        }
    }
    br.Close();