Allgemeiner Tipp: ließ doch die Exe zuerst komplett in einen Buffer und bearbeite sie darin. Dann schreibst du einfach den Buffer in einem Rutch wieder zurück. Die fgetc sind sehr unübersichtlich und wohl auch fehleranfällig 
Sonst: Flags setzt man i.R mit einem binary-or.
Zum Fehler: mit fputc schreibst du nur ein Zeichen/Byte rein. Int ist aber i.R etwas größer (üblicherweise 4 Bytes, wobei das je nach Plattform variieren kann)
.
Entweder arbeitest du eben mit buffern oder schreibst die Zahl "komplett" rein mit fwrite:
Code:
unsigned int myint=6;
fwrite(&myint, 1, sizeof(int), fp);
dasselbe gilt übrigens auch für deine VS-Abgleichfunktionen, da sie auch nur einmal fputc nutzen.
Statt den komischen Umwandlungen mit fgetc lässt sich übrigens auch fread nutzen:
Code:
unsigned int myint=0;
fread(&myint, 1, sizeof(int), fp);
printf("eingelesen: %d %x", myint,myint);
fclose(fp);
(vielleicht nicht der schönste Stil, aber C mag/kann ich nicht wirklich und das soll nur ein Beispiel für die Nutzung sein
)