Първо, ето моят метод за записване на зададените ми отмествания, минах през процеса на отстраняване на грешки и всичко се настройва съответно.
Например, задал съм 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