c - Reversing a binary file adds bits to it and not reversing -
i'm writing function gets binary file integers , reverses order. example, have binary file (in hexadecimal):
00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 and want be:
00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 but algorithm this:
00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 cc cc cc cc 00 00 00 00 cc cc cc cc and don't why... algorithm:
void reverse(file * fr) { int i, num1, num2, filelength; fseek(fr, 0, seek_end); filelength = ftell(fr) / sizeof(int); for(i = 0; < filelength / 2; i++) { fseek(fr, * sizeof(int), seek_set); fread(&num1, sizeof(int), 1, fr); fseek(fr, * sizeof(int), seek_end); fread(&num2, 4, 1, fr); fseek(fr, * sizeof(int), seek_end); fwrite(&num2, sizeof(int), 1, fr); fseek(fr, * sizeof(int), seek_set); fwrite(&num1, sizeof(int), 1, fr); } } int main() { file * f = fopen("test.bin", "r+b"); reverse(f); fclose(f); getchar(); homecoming 0; } what doing wrong?
edit: given file size divides sizeof(int).
edit 2:
after changing code pts pointed out, still doesn't work. outputs:
cc cc cc cc cc cc cc cc 00 00 00 03 00 00 00 04 00 00 00 01 00 00 00 00 00 00 00 02 my edited code shown above.
(by way, commenters, told not read whole file memory , reverse because it's supposed excercise in file manipulation, not in memory manipulation.)
thanks.
try this:
void reverse(file * fr) { int i, num1, num2, filelength; fseek(fr, 0, seek_end); filelength = ftell(fr) / sizeof(int); for(i = 0; < filelength / 2; i++){ fseek(fr, * sizeof(int), seek_set); fread(&num1, sizeof(int), 1, fr); fseek(fr, (-1-i) * sizeof(int), seek_end); fread(&num2, sizeof(int), 1, fr); fseek(fr, (-1-i) * sizeof(int), seek_end); fwrite(&num1, sizeof(int), 1, fr); fseek(fr, * sizeof(int), seek_set); fwrite(&num2, sizeof(int), 1, fr); } } int, int, int, int[eof] ^fseek(filep, 0, seek_end) ^ fseek(filep, -1*sizeof(int), seek_end) c file reverse binaryfiles
No comments:
Post a Comment