交换二进制文件中的偏移值

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,之前的文件内容,之后的文件内容。 每当您执行getput 时,它会获取或放置当前偏移量处的字符并将偏移量提前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 上)。

以上是关于交换二进制文件中的偏移值的主要内容,如果未能解决你的问题,请参考以下文章

ascii字符串与二进制文件的“grep”偏移量

file.seek()

matlab的bin文件高低字节转换

C:如何在特定时区(按偏移量)打印特定的“时间”值?

Java中排序(内存映射?)文件中的二进制搜索

ArcGIS 9.3中文件相比地图莫名奇妙的发生偏移现象,这是怎么回事?