Pues tengo novedades.
Desde que me dijiste lo de litte-endian, le e estado dando vueltas, ya que yo quiero usar el programa en cualquier pc, la idea de invertir los bytes, creo que no era buena, ya que en un pc big-endian, tambien invertiria los bytes y entonces seguiria estando mal.
He buscado la forma de invertir los datos recogidos, pero solo si el pc, es little, y creo que con esto lo e conseguido.
data = ((i&0xff)<<24)+((i&0xff00)<<8)+((i&0xff0000)>>8)+((i>>24)&0xff);
fwrite( (unsigned char*) &data
, 1, sizeof(data
), fd
);

Solo me faltaria confirmar, que en un pc big-endian, funcionaria bien.
Pero como los problemas nunca vienen solos, pues lo que te comente del codigo para invertir los bytes, osea que se comia bytes, me referia al archivo y no a la salida de consola, el resultado que con este proceso, tambien me cambia algunos bytes.

Como ves, el archivo sacado com el programa que te comente y el sacado com mi programa, esto creo que va a ser mas dificil de solucionar, xd.
Perdonar por tantas imagenes, pero siempre e creido, que mas vale una imagen que mil palabras.