Mediumendianness
Что такое endianness и как с ней работать?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Endianness — порядок байтов многобайтового числа в памяти. Big-endian — старший байт по младшему адресу. Little-endian (x86, ARM) — младший байт первым. Сетевой порядок — big-endian.
// 0x12345678 в little-endian в памяти:
// 0x78 0x56 0x34 0x12
// Перевод между host и network byte order
#include <netinet/in.h>
uint32_t net = htonl(host_value); // host → network (big-endian)
uint32_t host = ntohl(net); // network → host
// C++20: std::endian в <bit>
if constexpr (std::endian::native == std::endian::little) {
/* little-endian ветка */
}Для сериализации в файл/сеть всегда явно конвертируйте. Проблемы возникают при чтении бинарных файлов и передаче данных между x86 ↔ ARM.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.