Chefranov
@Chefranov
Новичок

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

Хочу сделать простую программку для редактирования сохранения игры. Имеется файл Player.chr в нем необходимо к примеру изменить следующее значение отвечающее за золото в игре:
5cdd1246119c3352522495.png
Как это сделать программно? Можно как-то это сделать функцией которая принимает адрес для изменения и значение в десятичной системе?
  • Вопрос задан
  • 564 просмотра
Решения вопроса 2
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
1 - если разовая операция - HxD
2 - если тег C# означает поиск решения на C# -
считывание байтового массива в память
var byte_array = File.ReadAllBytes("path_name");
, правка, запись обратно
3 - для больших файлов, работа со Stream, конкретнее тоже легко спросить (и потом уточнять)
https://duckduckgo.com/?q=c%23+%D0%B1%D0%B8%D0%BD%...

ps
можно и на C# но зачем микроскоп когда нужен молоток, в интерфейсах замутишься
при чем здесь интерфейсы?.. и на мой взгляд, в скриптах замутишься быстрее

pps по нынешним временам, файлы в мегабайты, и даже десятки мегабайт, стоит считать малыми, большими - файлы в гигабайты.. сотни мегабайт - по ситуации (скорость дисковой системы, объем доступной памяти, сложность обработки)
Ответ написан
@OwDafuq
Если известен Offset (позиция) байт в файле и она не меняется, то очень легко, примерно так:
short money = 0;

using (BinaryReader br = new BinaryReader(File.OpenRead("Player.chr")))
{
    br.BaseStream.Position = 0x6F0; //если позиция не меняется, то очень легко
    money = br.ReadInt16();
}

using (BinaryWriter bw = new BinaryWriter(File.OpenWrite("Player.chr")))
{
    bw.Seek(0x6F0, SeekOrigin.Begin); //прыгаем в позицию денег
    
    bw.Write(money + 150); //добавим 150 монет, например
}


В случае, если позиция меняется, то можно создать паттерн поиска, в вашем случае это будет очень легко, т.к. перед числом идет текст "money"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@pfg21
ex-турист
написать скрипт на перле, питоне, пыхе и даже не баше с помощью dd чтобы заменять байтики на нужные.
можно и на C# но зачем микроскоп когда нужен молоток, в интерфейсах замутишься.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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