Ответ - «это зависит» - прежде всего от машины, а также от того, как данные записываются в файл. Рассмотрим:
unsigned short x = 0x0102;
write(fd, &x, sizeof(x));
На некоторых машинах (Intel) младший байт (0x02) будет записан перед старшим байтом (0x01); на других (PPC, SPARC) старший байт будет записан перед младшим.
Итак, на машине с прямым порядком байтов (Intel) вы увидите байты:
0x02 0x01
Но на машине с прямым порядком байтов (PPC) вы увидите байты:
0x01 0x02
Ваши байты выглядят как 0x01 и 0x04. Ваш расчет для 0x02 выглядит некорректно.
Код C, который вы показываете, ничего не пишет. Значение в nDayOfYear - это 9 младших бит входного значения; nTimeOfDay представляется следующими 5 битами (поэтому используются 14 из 16 битов).
Например, если значение в strInput равно 12141 десятичному, 0x2F6D, то значение в nDayOfYear будет 365 (0x16D), а значение в nTimeOfDay будет 23 (0x17).
Это смешной заказ на хранение; Вы не можете просто сравнить два значения, тогда как, если вы упаковали день года в более значимую часть значения и время в менее значимое, вы могли бы сравнить значения как простые целые числа и получить правильное сравнение.