gpt4 book ai didi

c# - 从一个文件读取十六进制并写入另一个文件时遇到问题

转载 作者:行者123 更新时间:2023-12-02 20:03:58 24 4
gpt4 key购买 nike

我有一个 .dat 文件,其中包含一些内容。我想读取其中的十六进制的一部分,然后将其写入新文件。这是我的文件在十六进制编辑器中的样子: Original file

这是我的新文件的样子: New file

如果你看我的第一个文件的第一行,左边写着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)将写入字节并推进流位置本身

在此写入后手动递增位置会导致位置移动到文件当前长度之外,并且中间的间隙(1 个字节)将用零填充。

类似地,BinaryReader 也会将流位置推进到 ReadByte 之后。无需在每次循环迭代时重置该位置。

关于c# - 从一个文件读取十六进制并写入另一个文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com