【问题标题】:Replacing byte in file替换文件中的字节
【发布时间】:2017-12-07 19:34:47
【问题描述】:

我正在尝试用一些其他特定字节替换文件中的某些字节,但是我的二进制写入器替换了太多字节时出现问题。我的代码有什么问题?

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 00 00”。我想保留“30 31 FF”,只将“45”改为“50”。

【问题讨论】:

标签: c# hex binarywriter


【解决方案1】:

因为方法Write实际上写入int(4字节)。您应该将您的值转换为 byte 类型。 bw.Write((byte)0x50);

【讨论】:

    【解决方案2】:

    基本上你不想或不需要为此使用BinaryWriter。您正在调用 BinaryWriter.Write(int),其行为与记录完全一致。

    只需使用FileStream 写入单个字节:

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-30
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2020-06-13
      相关资源
      最近更新 更多