gpt4 book ai didi

c# - 从二进制文件中的索引获取偏移量

转载 作者:太空狗 更新时间:2023-10-30 01:26:01 26 4
gpt4 key购买 nike

我正在寻找二进制文件中的值,它的位置在二进制文件的索引中。我正在使用以下代码,它没有让我从二进制文件中返回正确的字节。

long offset = 0;

//Open read stream
Stream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader brFile = new BinaryReader(fileStream);

//Read index to find start position
fileStream.Seek(0xC, SeekOrigin.Begin);
byte[] b = brFile.ReadBytes(4);

//Convert to long value
for (int x = 0; x < byErr.Length; x++)
offset = System.Convert.ToInt64(b[x].ToString()); //I'm assuming this is the problem

//Cleanup
fileStream.Flush();
b = null;

//Read needed value
fileStream.Position = offset;
fileStream.Seek(-0x60, SeekOrigin.Current); //The value I need is 0x60 BEFORE the index location
b = brFile.ReadBytes(4);

//Cleanup
fileStream.Flush();
fileStream.Close();
brFile.Close();

我在第一次读取时得到了正确的值,位于 0xC,但我没有正确转换偏移量。我尝试先将它转换为字符串并获得正确的字符串值,但当我试图让它变长时,它搜索了错误的区域。另请注意,我需要的数据实际上是 ox60 在二进制文件中给我的索引位置之前。

最佳答案

是的,这绝对是问题所在:

for (int x = 0; x < byErr.Length; x++)
{
offset = System.Convert.ToInt64(b[x].ToString());
}

您正在将索引的每个字节 单独转换为字符串,然后对其进行解析并将其分配给偏移量。所以实际上只有最后一个字节会被使用。

你可以试试:

long offset = br.ReadInt32();

而不是调用 ReadBytes(4) 开始。如果使用了错误的字节顺序,您可以使用我的 EndianBinaryReader 类,来自 MiscUtil .

您应该记录一些诊断信息以显示您读取的索引,并将其与您的预期进行比较。

我还建议您将搜索代码更改为:

fileStream.Position = offset - 60;

为简单起见。此外,刷新您正在读取的文件流并将 b 设置为 null 是不必要的,您应该为您的 FileStream 使用 using 语句,此时您无需手动关闭任何内容。

关于c# - 从二进制文件中的索引获取偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5786289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com