Sunday, 15 September 2013

c - Reversing a binary file adds bits to it and not reversing -



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