はただのゲームファイルの六角を変更するMODインストーラーをしたが、私がそれを書くために使用するコードです正しくそれを書くように見えるしません:C#の書き込み
BinaryWriter BWriter = new BinaryWriter(File.OpenWrite(HexFile));
for (int i = value; i < value2; i++)
{
BWriter.BaseStream.Position = i;
BWriter.Write(NewHex);
}
そして、これがありますそれは書くべきこと「NewHex」:
1A 00 00 00 04 0B 19 01 4F 02 00 00 0A 00 00 00 00 00 00 1B 66 03 00 00 00 00 00 00 16 53 00 00
しかし、それは代わりに、それは16進数文字列をバイナリにすることを変換し、それを行うと、その後は全く違うものになるファイルに書き込み、それが束を書き込みしません。六角弦の前に、この例では61行のうち2行がそのヘックスの前に置かれていたので、breゲームをアスクする
誰にも解決策がありますか?
おかげ
EDIT:
private void button4_Click(object sender, EventArgs e)
{
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString(StartAddr);
int value2 = (int)new System.ComponentModel.Int32Converter().ConvertFromString(StopAddr);
//int StopInt = int.Parse(StopAddr);
BinaryWriter BWriter = new BinaryWriter(File.OpenWrite(HexFile));
for (int i = value; i < value2; i++)
{
BWriter.BaseStream.Position = i;
BWriter.Write(StringToByteArray(NewHex));
}
}
public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
私はそれが正しく今の六角を書きましたが、1つの問題が依然として存在していることがわかります。 が正しく書き込まれ、これは新しいコードで、最初の問題を修正しましたこれに代えて
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 00 00 00 04 0B 19 01 4F 02 00 00 0A 00 00 00 00 00 00 1B 66 03 00 00 00 00 00 00 16 53 00 00
::、それはこの書き込みを行う
1A000000040B19014F0200000A0000000000001B660300000000000016530000
この問題の解決方法を知っている人はいますか?
「NewHex」とは何ですか? –
OK、ゲームの16進法があるかもしれませんが、ゲームファイルがバイナリであることを知っています。その結果、その16進数は人間の解釈権にすぎませんか? – BugFinder
@BugFinder最初の問題は修正されましたが、まだ変わったことがあります。/ – user265889