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());
首先,这是我写入指定偏移量的方法,我已经完成了调试过程,所有内容都已相应设置。
例如,我将 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());