@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы

Как работает эта программа, определяющая порядок байтов в компьютере?

Взято с википедии
#include <stdio.h>
unsigned short x = 1; /* 0x0001 */
int main(void)
{
  printf("%s\n", *((unsigned char *) &x) == 0 ? "big-endian" : "little-endian");
  return 0;
}
  • Вопрос задан
  • 442 просмотра
Решения вопроса 1
15432
@15432
Системный программист ^_^
Создаётся переменная типа unsigned short int, которая почти во всех современных компиляторах имеет размер 2 байта. Затем ей присваивается значение 1. В случае архитектуры Little Endian, единица запишется в младший байт переменной, а в случае Big Endian - в старший байт. Дальше именно это и проверяется - конструкция *((unsigned char *) &x) получает значение младшего байта переменной. Если там оказался ноль, значит архитектура Big Endian.

Код, делающий то же самое, но проверяющий старший байт:
#include <stdio.h>
unsigned short x = 1; /* 0x0001 */
int main(void)
{
  printf("%s\n", *((unsigned char *) &x + 1) == 0 ? "little-endian" : "big-endian");
  return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
32seph
@32seph
Именно так, как написано. У двухбайтового x берется первый байт. Если он 0 то это BE, т. к. в этом случае первым идет старший байт - 00 01, в LE будет - 01 00.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы