Il warning ha ragione: quel casting ci deve essere, altrimenti passi alla printf un tipo diverso da quello che si aspetta, il che risulta in undefined behavior.
In pratica, se stampi solo quello non accade nulla di strano su macchine little endian, ma su macchine big endian viene stampato sempre e solo il carattere 0. Se invece nella stessa printf dopo stampi anche altri campi ottieni un gran casino.