C# 和十六进制偏移范围

C# and hex offset range

抱歉新手问题。我有一个游戏保存文件,其中包含有关游戏角色的一些信息。我想更改一些统计数据,例如金钱或技能,我知道数据在哪里,但我不明白如何使用十六进制范围偏移。例如,我知道技能点在 4863-4866 之间,如何正确读取和写入新值?

我的代码尝试:

        int skill = 0;

        using (BinaryReader br = new BinaryReader(File.OpenRead("Player.chr")))
        {
            br.BaseStream.Position = 0x12FF; // read position
            label1.Text = br.ReadInt32().ToString();
        }

        using (BinaryWriter bw = new BinaryWriter(File.OpenWrite("Player.chr")))
        {
            bw.Seek(0x12FF, SeekOrigin.Begin); // go to position
            bw.Write(skill + 10); // plus 10 skill points
        }

试试这个:

byte[] data = File.ReadAllBytes("Player.chr");
data[0x12FF] += 10;
File.WriteAllBytes("Player.chr", data);

有一个警告:这是在操作一个字节(8 位)。如果您的目标类似于 int(16/32 位),则必须相应地进行调整。

如果你想增加技能值,尝试正确读入一个变量"skill":

        int skill = 0;

        using (BinaryReader br = new BinaryReader(File.OpenRead("Player.chr")))
        {
            bw.Seek(0x12FF, SeekOrigin.Begin);
            skill  = br.ReadInt32();
        }


        using (BinaryWriter bw = new BinaryWriter(File.OpenWrite("Player.chr")))
        {
            bw.Seek(0x12FF, SeekOrigin.Begin); // go to position
            bw.Write(skill + 10); // plus 10 skill points
        }

它的代码替换了文件中的旧值 "skill"。