BinaryWriter 错误地写入额外的两个字节 C#

BinaryWriter Incorrectly writing two bytes extra C#

首先,这是我写入指定偏移量的方法,我已经完成了调试过程,所有内容都已相应设置。

例如,我将 pokemonValue 设置为 190,然后将其转换为 0xBE,然后写入偏移量 offsetArray[i] == 0x1D104 预期的行为是它只会在此偏移处写入 0xBE。它不会那样做。相反,它分别在 0x1D104 0x1D105 0x1D106 处写入 0x02 0x42 0x45

        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

我已经检查了我的偏移量,它们是正确的,而且在我从它们那里读取的程序中,它们按预期工作。所以我不确定为什么这不能正常工作或者为什么设置数据不正确。

如果要写入特定字节,则需要使用 byte[] 等 API。如果您使用 Write(string) API,它会为字符串长度等编码额外数据,您可能 不想要 。坦率地说,BinaryWriter 在大多数情况下不是很有用 - 你最好写信给 Stream 等,这将限制你 API 那些 做你的事期待.

我也运行加入这个,如果你把你的字符串转换成一个字符数组,它不会添加额外的字节。

writer.Write(hexVal.ToCharArray());