C# 替换文件中的字节

C# 替换文件中的字节,c#,hex,binarywriter,C#,Hex,Binarywriter,我试图用其他特定字节替换文件中的某些字节,但二进制编写器替换太多字节时出现问题。我的代码有什么问题 using (BinaryWriter bw = new BinaryWriter(File.Open(fileName, FileMode.Open))) { bw.BaseStream.Position = 0x3; bw.Write(0x50); } 本应将字母“E”(十六进制0x45)更改为字母“p”,但却更改了该字节和另外3个字节;从“45

我试图用其他特定字节替换文件中的某些字节,但二进制编写器替换太多字节时出现问题。我的代码有什么问题

using (BinaryWriter bw = 
    new BinaryWriter(File.Open(fileName, 
        FileMode.Open)))
{
    bw.BaseStream.Position = 0x3;
    bw.Write(0x50);
}

本应将字母“E”(十六进制0x45)更改为字母“p”,但却更改了该字节和另外3个字节;从“45 30 31 FF”到“50 00”。我想保留“30 31 FF”,只将“45”改为“50”。

因为方法
写入
实际写入
int
(4字节)。您应该将值转换为
字节
类型<代码>bw.Write((字节)0x50)

因为方法
写入
实际写入
int
(4字节)。您应该将值转换为
字节
类型<代码>bw.Write((字节)0x50)

基本上,您不希望或不需要为此使用
BinaryWriter
。您正在呼叫,其行为完全符合记录

只需使用
FileStream
编写一个字节:

using (var stream = File.Open(fileName))
{
    stream.Position = 3;
    stream.WriteByte(0x50);
}

更简单、更易于阅读(显然只需编写一个字节),并且可以执行您想要的操作。

基本上您不希望或不需要为此使用
BinaryWriter
。您正在呼叫,其行为完全符合记录

只需使用
FileStream
编写一个字节:

using (var stream = File.Open(fileName))
{
    stream.Position = 3;
    stream.WriteByte(0x50);
}

更简单、更容易阅读(显然只写了一个字节),并且做了您想做的事情。

您可能想查看这篇关于简短符号的文章:您可能想查看这篇关于简短符号的文章: