Actually he's got that part right. He reads in an integer into a 4 bit value that he later reinterprets as a float. The type of i and f have no bearing here, as long as they are 4 bytes. In fact, an array of 4 chars may be the best type since that's guaranteed to be 4 bytes.
The results are predictable, but not well defined. Unfortunately I don't see a well defined way of doing this in C (unlike C++).