Во-первых, вот мой метод записи по указанным смещениям, я прошел процесс отладки, и все устанавливается соответствующим образом.
Например, я установил для pokemonValue значение 190
, затем оно преобразуется в 0xBE
и затем записывается в смещение по offsetArray[i] == 0x1D104
Ожидаемое поведение состоит в том, что он просто запишет 0xBE по этому смещению. Это не так. вместо этого он пишет 0x02 0x42 0x45
в 0x1D104 0x1D105 0x1D106
соответственно.
public void writeStarterPokemon(long[] offsetArray, BinaryWriter writer, int pokemonValue)
{
string hexVal = "";
for (int i = 0; i < offsetArray.Length; i++)
{
writer.BaseStream.Position = offsetArray[i];
hexVal = string.Format("{0:X}", pokemonValue); // pokemonValue is a decimal ranging from 0-255;
MessageBox.Show(string.Format("Hex val: 0x{0:1X}, Offset: 0x{1:X5}", hexVal, offsetArray[i])); // to see if the values are correct
writer.Write(hexVal);
writer.Flush();
}
}
Вот пример используемого массива и того, как вызывается метод
private long[] squirtleOffsets = new long[] { 0x1D104, 0x1D11F, 0x24BA5, 0x26FBC};
writeStarterPokemon(sqrtlOffsets, writer, NameList.SelectedIndex);
// NameList is the name of my comboBox populated with pokemon data, 0-255
Я проверил свои смещения, и они верны, и ранее в программе я читал из них, что работает так, как задумано. Поэтому я не уверен, почему это работает неправильно или, скорее, устанавливает неверные данные.
BinaryWriter
добавляет к строкам префикс их длины, отсюда и 0x02. Похоже, что вы хотите на самом деле написать значение BINARY, а не строку вообще. Всегда лиpokemonValue
находится в диапазоне 0..255? - person Matthew Watson   schedule 01.04.2020writer.Write((byte)pokemonValue);
или использоватьwriter.BaseStream.WriteByte((byte)pokemonValue);
- person Matthew Watson   schedule 01.04.2020writer.BaseStream.WriteByte((byte)pokemonValue);
Я использовал это, и это сработало, спасибо!! - person David   schedule 01.04.2020