Функция is_little_endian - C (СИ)
Формулировка задачи:
Нужна программа,в которой используется описанное ниже.
Напишите функцию is_little_endian(), которая возвращает 1 при компиляции и запуске на машине с прямым порядком байтов (little-endian), и возвращает 0 при компиляции и запуске на машине с обратным порядком байтов (big-endian). Функция должна работать на машине с любым размером слова (word).
Решение задачи: «Функция is_little_endian»
textual
Листинг программы
#include <stdio.h>
#include <stdint.h>
enum
{
endian_big,
endian_little,
endian_pdp,
endian_unknown
};
int CheckEndianness(void)
{
static const uint32_t endianness = 0xA1B2C3D4;
switch (((unsigned char*)&endianness)[0])
{
case 0xD4:
return endian_little;
case 0xA1:
return endian_big;
case 0xB2:
return endian_pdp;
default:
return endian_unknown;
}
}
int main(void)
{
printf("%d\n", CheckEndianness());
return 0;
}
Объяснение кода листинга программы
В данном коде определена функция CheckEndianness, которая определяет порядок байтов в 32-битном числе. Список действий:
- В функции объявлена константа endianness со значением 0xA1B2C3D4.
- В переменной-флагере switch происходит проверка байта с индексом 0 в числе endianness.
- Если значение этого байта равно 0xD4, то функция возвращает значение endian_little.
- Если значение этого байта равно 0xA1, то функция возвращает значение endian_big.
- Если значение этого байта равно 0xB2, то функция возвращает значение endian_pdp.
- Если значение этого байта не равно ни одному из вышеописанных, то функция возвращает значение endian_unknown.
- В функции main вызывается функция CheckEndianness и её результат выводится на экран с помощью функции printf.
- Функция main возвращает 0, заканчивая работу программы.