我有一个数字的二进制文件,例如 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/