Chefranov
@Chefranov
Новичок

Как прочитать и отредактировать HEX значение?

Есть файл (сохранение игры) и есть известное расположение (offset) мне нужного значения
5ec6476d88174318124279.png
И вроде как есть код для чтения и записи значения:
short skill = 0;

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

            using (BinaryWriter bw = new BinaryWriter(File.OpenWrite("Player.chr")))
            {
                bw.Seek(0x6F0, SeekOrigin.Begin); 

                bw.Write(skill + 10); // добавим 10 очков умений
            }


Вопрос в следующем, правильный ли у меня код для работы с offset и как работать с offset (на скрине в целочисленном формате, а в коде как hex и не вижу диапазона)? Если можно пример, но основе данных скрина (offset 4863-4866. Length 4, Int)?
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Сдвиг при чтении указывается у вас в коде на
br.BaseStream.Position = 0x6F0; - Тут можно и в десятичной системе писать
Диапазон при чтении -br.ReadInt32()(32 бита)
При записи - bw.Seek(0x6F0, SeekOrigin.Begin);
Диапазон при записи bw.Write(skill + 10); (используется перегрузка, которая принимает int - тоесть 32 бит)
Пример для случая со скрина:
using (var file = File.Open("Player.chr", FileMode.Open, FileAccess.ReadWrite))
{
    int skillPoints;
    using (var br = new BinaryReader(file))
    {
        br.BaseStream.Position = 4863; //0x12FF
        skillPoints = br.ReadInt32();
    }

    using (var bw = new BinaryWriter(file))
    {
        bw.BaseStream.Position = 4863; //0x12FF
        bw.Write(skillPoints + 10);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы