Код писать лениво, опишу так
Числа хранятся (на обычных x86) "задом наперед". То есть если число - int (32-битное) - оно займет 4 байта, причем самый старший байт будет "в хвосте". Для примера - есть буфер, содержащий 01 02 03 04, hex разумеется (Ваш пример неудачен). Если в буфере int - то какое это число? Правильно 0x04030201.
Поэтому ничего никуда разворачивать не надо, магия С - в адресной арифметике!
tydedef struct {
short int a;
int b;
} wrk_buf;
wrk_buf my_buf;
read(desc, (void *) &my_buf, 1000);
После чего можно будет просто обращаться к полям структуры - как к обычным переменным. Понятно, что файл нужно сначала открыть, получить его размер - 1000 - условное число.