Вопрос изначально помечен c ; этот ответ может быть неприменим к не совсем C.
В чем проблема с этим:
int value;
char bytes[sizeof(int)];
bytes[0] = (value >> 0) & 0xFF;
bytes[1] = (value >> 8) & 0xFF;
bytes[2] = (value >> 16) & 0xFF;
bytes[3] = (value >> 24) & 0xFF;
Вы можете рассматривать это как развернутую петлю. Сдвиг на ноль может быть опущен; Оптимизатор, безусловно, сделает это. Несмотря на то, что результат смещения вправо отрицательного значения не определен, проблем нет, поскольку этот код получает доступ только к битам, в которых определено поведение.
Этот код дает байты в порядке с прямым порядком байтов - младший байт находится в bytes[0]
. Очевидно, что порядок с прямым порядком байтов достигается:
int value;
char bytes[sizeof(int)];
bytes[3] = (value >> 0) & 0xFF;
bytes[2] = (value >> 8) & 0xFF;
bytes[1] = (value >> 16) & 0xFF;
bytes[0] = (value >> 24) & 0xFF;