Если вы хотите проверить на маленький / большой порядок байтов, вы можете использовать объединение:
int isBigEndian (void)
{
union foo {
size_t i;
char cp[sizeof(size_t)];
} u;
u.i = 1;
return *u.cp != 1;
}
Это работает, потому что в младшем порядке это будет выглядеть как 01 00 ... 00, но в большомendian, это будет 00 ... 00 01 (... состоит из нулей).Поэтому, если первый байт равен 0, тест возвращает true.В противном случае возвращается false.Однако помните, что существуют также машины со смешанным порядком байтов, которые по-разному хранят данные (некоторые могут переключать порядковый номер, другие просто хранят данные по-разному).PDP-11 сохранил 32-битное int как два 16-битных слова, за исключением того, что порядок слов был обратным (например, 0x01234567 был 4567 0123).