Во-первых, вот мой метод записи в указанные смещения, я прошел процесс отладки, и все настраивается соответствующим образом.
Например, я установил 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
Я проверил мой смещения и они правильные и раньше в программе я с них читал, которая работает как положено. Поэтому я не уверен, почему это работает неправильно, или, скорее, установил неверные данные.