c - c中没有结构的反向二进制文件

标签 c file binaryfiles fseek

我有一个数字的二进制文件,例如 1234。我需要在 C 中将其反转为 4321,而无需结构或数组来帮助我。我想到必须归档指针:一个指向开头,一个指向结尾,然后交换它们,直到它们到达彼此。

这是我的代码:

#include <stdio.h>
int main() {
FILE* f1;
f1 = fopen("C:\\temp\\file2.bin","r+b");
if (!f1) {
    fprintf(stderr, "file doesn't exist");
    exit(1);
}
reverse(f1);
fclose(f1);
exit(0);
}

void reverse(FILE* fr) {
int i1 = 0, i2 = -2;
char c = '\0', tmp = '\0', size;
FILE* f1 = fr;
fseek(fr, 0, SEEK_END);
size = ftell(fr);
fseek(fr, -1, SEEK_END);
while ((i1 - i2) != size+2) {
    fread(&c,1, 1, fr);
    fseek(f1, i1, SEEK_SET);
    fread(&tmp, 1, 1, f1);
    fwrite(&c,1, 1, f1);
    fwrite(&tmp, 1, 1, fr);
    fseek(fr, i2, SEEK_END);
    i1++;
    i2--;
}
fclose(f1);
}

看起来没问题,没有任何错误,但文件保持不变。

最佳答案

最简单的方法:

1-从下到上读取文件,将字节写入临时文件(从上到下)

2-调用unlink()删除原文件

3- 将临时文件重命名为原始文件

但这就是作弊:p

关于c - c中没有结构的反向二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28189584/

相关文章:

c++ - 无法理解 C 中字符串和循环的这种意外行为

android - 在 Android 中使用 OpenSSL 的 AES-256 CBC 加密/解密字符串

c - 二进制文件 I/O。 (感觉这个操作有心理障碍)

c - 如何在 C 中使用 'fread' 从文件中读取并获取分离的数据?

c++ - 在 Windows 上使用 gmplib 编译 cpp 代码时的链接问题

c++ - 我正在比较两个具有相同值的变量,但它说它们不同

c - 交换无符号短整数的字节

c - 这段汇编代码有什么作用?

php - 删除重复的 ID?

java - 无法使用文件的 URL