BinaryWriter Неправильная запись двух дополнительных байтов C# - PullRequest
1 голос
/ 01 апреля 2020

Во-первых, вот мой метод записи в указанные смещения, я прошел процесс отладки, и все настраивается соответствующим образом.

Например, я установил 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

Я проверил мой смещения и они правильные и раньше в программе я с них читал, которая работает как положено. Поэтому я не уверен, почему это работает неправильно, или, скорее, установил неверные данные.

1 Ответ

3 голосов
/ 01 апреля 2020

Если вы хотите записать определенные c байты, вам нужно использовать API byte[] et c. Если вы используете API Write(string), он кодирует дополнительные данные для длины строки и т. Д. c, которые, по-видимому, не нужны . Честно говоря, BinaryWriter не очень полезен в большинстве сценариев ios - вам лучше писать в Stream et c, который ограничит вас API, которые делают то, что вы ожидаете .

...