%u - это просто "int", который архитектурно-зависимую длину имеет, в Вашем случае 16 бит. чтобы корректно вывести long int - нужна последовательность %lu
Байты так выделять некорректно - у Вас сдвиг везде на 8. Корректно - на 8, потом на 16, потом на 24. И то лишь в случае, если требуемый порядок следования байт "little endian", то есть первым по порядку следует младший байт.
UPD: Упс. Извините, не заметил, что там ">>=". Корректно байты выделять так. Но с учетом "little endian", и не факт, что оптимизатор правильно поймет и скомпилирует в оптимальную конструкцию.
|