У меня есть двоичный файл чисел, например 1234. Мне нужно отменить его в C, чтобы стать 4321 без структур или массивов, чтобы помочь мне. Я думал о том, что нужно указывать указатели: один для начала и один до конца, и поменяйте их, пока они не достигнут друг друга.обратный двоичный файл без структур в c
Это мой код:
#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);
}
кажется Allright и не имеет каких-либо ошибок, но файл остается неизменным.
Th последняя FSEEK должна быть SEEK_SET - не SEEK_END –
Если это не наоборот, кажется, что у вас одна большая ошибка.. Но я думаю, что @ DanByström прав. –
Вы говорите о fseek (fr, i2, SEEK_END)? Зачем? Я хочу установить fr на следующий символ с конца, и i2 всегда будет отрицательным, чтобы он соответствовал. – Avital