Функция 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, заканчивая работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д