如何使用C#编辑二进制文件的十六进制值

前端之家收集整理的这篇文章主要介绍了如何使用C#编辑二进制文件的十六进制值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以这是我的问题.我有一个二进制文件,我想编辑.当然可以使用十六进制编辑器编辑它,但是我需要编写一个程序来编辑这个特定的文件.说我知道一个我想要编辑的十六进制,我知道它的地址等等.假设它是一个16位的二进制文件,地址是00000000,它在第04行,它的值为02.我如何创建一个程序会改变该十六进制的值,只有那个十六进制点击一个按钮?

我找到了有关类似的东西的资源,但是我的生活中找不到有关确切问题的帮助.

任何帮助将不胜感激,请不要只告诉我答案,如果有一个,但尝试解释一下.

解决方法

我认为这是一个具体的例子最好的解释.以下是可执行文件的前32个字节,如Visual Studio的十六进制编辑器所示:
00000000  4D 5A 90 00 03 00 00 00  04 00 00 00 FF FF 00 00
00000010  B8 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00

现在一个文件实际上只是一个线性的字节序列.您在十六进制编辑器中看到的行就在这里,使事情更容易阅读.当您要使用代码操作文件中的字节时,需要通过其基于0的位置来标识字节.在上述例子中,非零字节的位置如下:

Position  Value
--------  ------
  0        0x4D
  1        0x5A
  2        0x90
  4        0x03
  8        0x04
 12        0xFF
 13        0xFF
 16        0xB8
 24        0x40

在上面显示的十六进制编辑器表示中,左侧的数字表示相应行中第一个字节的位置.编辑器每行显示16个字节,因此每行增加16个(0x10).

如果您只想采取文件中的一个字节并更改其值,我看到的最有效的方法是使用FileStream打开文件,寻找适当的位置并覆盖该字节.例如,以下将将位置24处的0x40更改为0x04:

using (var stream = new FileStream(path,FileMode.Open,FileAccess.ReadWrite)) {
    stream.Position = 24;
    stream.WriteByte(0x04);
}

猜你在找的C#相关文章