| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > uint16_t и переносимость |
| Автор: afx33sd 20.8.2013, 10:38 | ||
У меня есть структура, например такая:
Структура не упакованная. Вопрос в том, будет ли она она переносима на различные платформы (вопрос о big/little-endian). Меня смущает тип uint16_t. Хочу сделать это структуру ключом для map. Думаю, если упаковывать, то придется морочиться с big/little endian, а этого не хочется. |
| Автор: SenkraD 20.8.2013, 10:48 | ||
Я так понимаю, что это внутренняя структура, которая нужна для хранения настроек и которую не будут передавать по сети в виде последовательности байтиков, ведь так? если да, то не вижу никаких проблемм. если нужно передавать ее по сети, то пишите сериализацию/дезериализацию или возьмите готовую, главное ее по сети не передавать, как в примере ниже:
так как так у вас появятся проблеммы при передаче между разными платформами |
| Автор: afx33sd 20.8.2013, 11:35 | ||
| Передавать не буду, нужно чтобы была переносимость между платформами. Как я понимаю uint16_t - это не то же самое, что unsigned a:16, то есть все в порядке. Спасибо. К реальной задачи пост относится косвенно, хотелось разобраться.
Это почему? И так и так - 4 байта. Ключ для map достоин отдельной ветки обсуждения: http://forum.vingrad.ru/index.php?showtopic=371322&view=findpost&p=2579158 |
| Автор: feodorv 20.8.2013, 11:53 |
Потому что 2 байта, используемые для дозаполения структуры, могут нести совершенно случайную информацию, и нужно просто аккуратно составить функцию сравнения ключей. А какая разница с точки зрения big/little endian или переносимости кода? |
| Автор: afx33sd 20.8.2013, 13:20 | ||||||
Это да
Например, для:
битовые поля для little-endian, раздаются с "одного конца" байта, а для big-endian наоборот, собственно для unsigned a:16 аналогично, поправьте если не так |
| Автор: bsa 20.8.2013, 13:40 |
| afx33sd, если ты не используешь union, то тебе должно быть по барабану. |