C# 用C查找十六进制值#

C# 用C查找十六进制值#,c#,search,hex,C#,Search,Hex,我试图在文件中搜索十六进制值,如果该值存在,我需要从找到的位置复制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.ReadUI

我试图在文件中搜索十六进制值,如果该值存在,我需要从找到的位置复制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();
BinaryReader bw=新的BinaryReader(File.OpenRead(filepath));
字节[]bc={0xa0,0x00,0x00,0x03};
for(int i=0;i
我得到一个错误,如下所示:

“System.IO.EndOfStreamException”类型的未处理异常 发生在mscorlib.dll中

其他信息:无法读取流结尾以外的内容


该错误是由于您的
for
循环的步长等于1,并且一次读取4个字节造成的。读取后,流位置提前4。请将
for
循环更改为以下内容:

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

如果要在每个位置搜索而每次不跳过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();
Stream f=File.OpenRead(文件名);
BinaryReader br=新的BinaryReader(f);
对于(int i=0;i
您所说的“16字节字符”是什么意思?字符和字节是非常不同的,您需要确切地知道您想要什么。我怀疑您的错误是因为您一次读取4个字节,但是读取(长度以字节-10为单位)times.String包含16个字符,可能超过16个字节…你需要知道正在使用什么编码。你知道吗?我只需要得到16个字节,并通过控制台显示为字符串。我不知道,你需要找出。这16个字节是真的文本,还是你需要将它们转换为十六进制?是4个字节的您在4字节边界上查找的序列?在编辑版本中,我仍然得到相同的错误。您在哪一步得到错误?什么是“编辑版本”"?您可以将新版本附加到初始帖子。让我重新定义我的问题。Step1。我正在搜索签名十六进制值0x030000A0。我需要在文件中搜索它。Step2。如果我发现,我需要搜索到该位置,并将16字节字符串值提取到控制台。然后
f.Length-10
应更改为
f.Length-16
因为您无法从
f.Length-10
位置读取16个字节。首先,让我们整理十六进制值的标识,然后尝试在文件中定位,并在控制台中找出偏移量。