Ciao, immagino che quel file di testo sia stato scritto manualmente, per cui i numeri 8, 56, ecc.. in realtà non sono numeri, ma sono caratteri ASCII. Di conseguenza il numero 8, che rappresentato come int sarebbe una sequenza di 32 bit (ovvero in esadecimale 0x00000008), è in realtà rappresentato come carattere (cioè 1 solo byte). Andando a vedere nella tabella ASCII si scopre che 8 è rappresentato in esadecimale come 0x38.
Di conseguenza l'istruzione:
fread(vet, sizeof(int), 4, fp)
si va a leggere 4 volte 4 byte dal file (ovvero il primo byte sarà la sequenza 0x38 0x20 0x39 0x20, che rappresentano i caratteri ASCII '8', ' ', '9' e ' ', e così via per gli altri 3 byte) e li piazza nel buffer.
Quando poi fai la printf dici al compilatore di considerare i vari bit come se rappresentassero un numero intero con segno. Il risultato è che, a seconda dell'endianness del tuo pc, il primo numero che ti verrà stampato sarà uno fra 941635872 (ovvero 0x38203920) e 540614712 (ovvero 0x20392038, cioè i byte sono letti "al contrario"); più probabilmente avrai quest'ultimo risultato, visto che le cpu intel sono little endian.