无法从一个文件读取十六进制并写入另一个文件
Trouble reading hex from one file and writing to another
我有一个 .dat 文件,里面有一些东西。我想读取其中的一部分十六进制,然后将其写入新文件。这是我的文件在十六进制编辑器中的样子:
我的新文件如下所示:
如果你看我的第一个文件的第一行,左边是
Do041220B。在我的新文件中,第一行显示为 D.o.0.4.1.2.2.0.B
出于某种原因,它在所有内容之间添加了 00。
这是我的代码:
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
int happyint=0x0;
int angryint = 0x1;
switch (textBox1.Text)
{
case "1":
happyint = 0x0;
angryint = 0x610;
break;
case "2":
happyint = 0x620;
angryint = 0xC30;
break;
case "3":
happyint = 0xC40;
angryint = 0x1250;
break;
default:
return;
break;
}
BinaryReader br = new BinaryReader(File.OpenRead(ofd.FileName));
BinaryWriter bw = new BinaryWriter(File.Create(Application.StartupPath + "/" + textBox1.Text + "file.dat"));
bw.BaseStream.Position = 0x0;
for (int i = happyint; i <= angryint; i++)
{
br.BaseStream.Position = i;
bw.Write(br.ReadByte());
bw.BaseStream.Position += 0x1;
}
bw.Close();
br.Close();
我的代码有什么问题?
问题是你在流中手动推进位置
// this is wrong!!
bw.BaseStream.Position += 0x1;
这是不必要的,因为 BinaryWriter.Write(Byte)
将写入字节 并推进流位置本身 .
手动递增 Position
,在此写入后,会导致位置超出文件的当前长度,并且中间间隙(1 字节)用零填充。
类似地,BinaryReader
也在 ReadByte
之后提高流位置。无需在每次循环迭代时重置该位置。
这行代码在完成时自动将流位置前进一个字节:
bw.Write(br.ReadByte());
然后手动递增时:
bw.BaseStream.Position += 0x1;
您正在添加额外的零字节值。
我有一个 .dat 文件,里面有一些东西。我想读取其中的一部分十六进制,然后将其写入新文件。这是我的文件在十六进制编辑器中的样子:
我的新文件如下所示:
如果你看我的第一个文件的第一行,左边是 Do041220B。在我的新文件中,第一行显示为 D.o.0.4.1.2.2.0.B 出于某种原因,它在所有内容之间添加了 00。
这是我的代码:
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
int happyint=0x0;
int angryint = 0x1;
switch (textBox1.Text)
{
case "1":
happyint = 0x0;
angryint = 0x610;
break;
case "2":
happyint = 0x620;
angryint = 0xC30;
break;
case "3":
happyint = 0xC40;
angryint = 0x1250;
break;
default:
return;
break;
}
BinaryReader br = new BinaryReader(File.OpenRead(ofd.FileName));
BinaryWriter bw = new BinaryWriter(File.Create(Application.StartupPath + "/" + textBox1.Text + "file.dat"));
bw.BaseStream.Position = 0x0;
for (int i = happyint; i <= angryint; i++)
{
br.BaseStream.Position = i;
bw.Write(br.ReadByte());
bw.BaseStream.Position += 0x1;
}
bw.Close();
br.Close();
我的代码有什么问题?
问题是你在流中手动推进位置
// this is wrong!!
bw.BaseStream.Position += 0x1;
这是不必要的,因为 BinaryWriter.Write(Byte)
将写入字节 并推进流位置本身 .
手动递增 Position
,在此写入后,会导致位置超出文件的当前长度,并且中间间隙(1 字节)用零填充。
类似地,BinaryReader
也在 ReadByte
之后提高流位置。无需在每次循环迭代时重置该位置。
这行代码在完成时自动将流位置前进一个字节:
bw.Write(br.ReadByte());
然后手动递增时:
bw.BaseStream.Position += 0x1;
您正在添加额外的零字节值。