принудительное изменение порядка байтов

#c #byte #endianness

#c #байт #порядковый номер

Вопрос:

 unsigned char endian[2] = {1, 0};
short x;

x = *(short *) endian;
 

Я не понимаю значение, содержащееся в x. Если у меня система с малым порядком, x равно 1.

Но если у меня система с большим порядком, x равно 256.

Почему значение 256, а не 128?

Спасибо за вашу помощь.

Комментарии:

1. 1 находится в нулевом бите самого значимого октета 16-битного значения с большим порядком. Спросите себя, что такое 2 ^ 8?

Ответ №1:

Потому что байты 01 00 в формате big-endian — это значение 0x0100 , которое равно 1 << 8 == 2**8 == 256 (напомним, что в байте 8 бит).

Комментарии:

1. Другие ограничения для этого решения: CHAR_BITS == 8 и sizeof(short) == 2