交换二进制文件中的偏移值
Posted
技术标签:
【中文标题】交换二进制文件中的偏移值【英文标题】:Interchanging offset values in a binary file 【发布时间】:2021-03-06 19:39:00 【问题描述】:最近一直在做一些脚本,今天遇到了一个小问题,我想交换一个二进制文件的2个偏移量的值。就像将位置 0x00 的值与 0x01 的值互换一样,我尝试使用 file.seekp(0x00) 然后获取该值,将其保存在一个字符中,然后将值插入位置 0x01 我使用了 file.seekp (0x01) 然后是file.put(char),但主要问题是它没有修改0x01的值,只是将char添加到它。
有什么办法可以修改它的值吗?
在尝试交换前两个偏移值之前:
尝试交换前两个偏移值后:
基本上,我需要的是交换它们,而不是将第一个值添加到第二个偏移量。
我使用的代码:
char c[1];
fstream file(path, ios::in | ios::out | ios::binary );
file.seekp(0x00);
c[0] = file.get();
file.seekp(0x01);
c[1] = file.get();
file.put(c[0]);
file.seekp(0x00);
file.put(c[1]);
【问题讨论】:
“只添加字符”是什么意思?显示一个minimal reproducible example,之前的文件内容,之后的文件内容。 每当您执行get
或put
时,它会获取或放置当前偏移量处的字符并将偏移量提前1。因此您的第一次放置将位于偏移量2。
【参考方案1】:
c
的大小应为 2,get
/put
移动导致问题的文件光标。
这是更正后的代码:
char c[2];
fstream file("test", ios::in | ios::out | ios::binary);
file.seekp(0x00);
c[0] = file.get();
c[1] = file.get();
file.seekp(0x00);
file.put(c[1]);
file.put(c[0]);
【讨论】:
不过,它不会交换值。 从这个 25 50 变成这个 50 00 奇怪。你确定吗?我刚刚检查过,它在我的机器上运行良好(在 Linux 上)。以上是关于交换二进制文件中的偏移值的主要内容,如果未能解决你的问题,请参考以下文章