Предположим, что int равен 4 байта (в C это не может быть). Это предположение просто для упрощения примера ...
Вы можете посмотреть на каждый из этих 4 байтов в отдельности.
char
- это байт, поэтому он смотрит на первый байт 4-байтового буфера.
Если первый байт не равен 0, то это говорит о том, содержится ли младший бит в первом байте.
Я случайно выбрал число 42, чтобы избежать путаницы с каким-либо особым значением в значении 1.
int num = 42;
if(*(char *)&num == 42)
{
printf("\nLittle-Endian\n");
}
else
{
printf("Big-Endian\n");
}
Разбивка:
int num = 42;
//memory of the 4 bytes is either: (where each byte is 0 to 255)
//1) 0 0 0 42
//2) 42 0 0 0
char*p = #/*Cast the int pointer to a char pointer, pointing to the first byte*/
bool firstByteOf4Is42 = *p == 42;/*Checks to make sure the first byte is 1.*/
//Advance to the 2nd byte
++p;
assert(*p == 0);
//Advance to the 3rd byte
++p;
assert(*p == 0);
//Advance to the 4th byte
++p;
bool lastByteOf4Is42 = *p == 42;
assert(firstByteOf4Is42 == !lastByteOf4Is42);
Если firstByteOf4Is42 имеет значение true, у вас есть порядок байтов. Если lastByteOf4Is42 имеет значение true, то у вас есть big-endian.