2015-10-21 3 views
2

Я пытаюсь написать целое число в байтовый буфер. Будет ли следующий код писать всегда в большом формате с обратным порядком байтов, независимо от байтов системы:Правильно ли бит-сдвиг изолирует байты на разных системах?

byte[0] = (uint8_t) (val & 0xFF000000) >> 24; 
byte[1] = (uint8_t) (val & 0x00FF0000) >> 16; 
byte[2] = (uint8_t) (val & 0x0000FF00) >> 8; 
byte[3] = (uint8_t) (val & 0x000000FF); 

К сожалению, у меня нет доступа к Htonl() и аналогичные функции.

+0

Нет необходимости маскировать, предполагая, что 'val' не меньше' uint32_t' (и меньше не имеет смысла). – Olaf

+0

FYI, большую часть времени существует '# define' для системной сущности (например,' BIG_ENDIAN', 'LITTLE_ENDIAN'), а также некоторая внутренняя функция' bswap'. – Jason

+0

нет необходимости в маскировке или литье, поскольку массив результатов должен находиться в ячейках 'unit8_t'. –

ответ

7

Да, это будет работать правильно. Операторы смещения битов имеют дело с абстрактными числовыми значениями, а не с тем, как они представлены в аппаратных регистрах или ОЗУ. >> N по существу эквивалентен делению на 2 N.

+0

Отлично, спасибо. – MarkP

Смежные вопросы