![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| afx33sd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.8.2013 Репутация: нет Всего: нет |
У меня есть структура, например такая:
Структура не упакованная. Вопрос в том, будет ли она она переносима на различные платформы (вопрос о big/little-endian). Меня смущает тип uint16_t. Хочу сделать это структуру ключом для map. Думаю, если упаковывать, то придется морочиться с big/little endian, а этого не хочется. |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 2 Всего: 23 |
Я так понимаю, что это внутренняя структура, которая нужна для хранения настроек и которую не будут передавать по сети в виде последовательности байтиков, ведь так? если да, то не вижу никаких проблемм. если нужно передавать ее по сети, то пишите сериализацию/дезериализацию или возьмите готовую, главное ее по сети не передавать, как в примере ниже:
так как так у вас появятся проблеммы при передаче между разными платформами |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Всё зависит от того, будете вы экземпляры этой структуры гонять по сети или сохранять на диск ("как есть"). Если нет - то какие проблемы? А то, что у Вас размер структуры не выровнен, это Вас не смущает? Вместо uint16_t для номера порта можно использовать uint32_t, тогда смущение типом uint16_t пропадёт))) Да и ключ для map более правильный будет... Всё-таки, опишите задачу поподробнее. IP/port намекает, что в крайнем случае эту пару всегда можно хранить в сетевом порядке байт. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| afx33sd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.8.2013 Репутация: нет Всего: нет |
Передавать не буду, нужно чтобы была переносимость между платформами.
Как я понимаю uint16_t - это не то же самое, что unsigned a:16, то есть все в порядке. Спасибо. К реальной задачи пост относится косвенно, хотелось разобраться.
Это почему? И так и так - 4 байта. Ключ для map достоин отдельной ветки обсуждения: http://forum.vingrad.ru/index.php?showtopi...t&p=2579158 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Потому что 2 байта, используемые для дозаполения структуры, могут нести совершенно случайную информацию, и нужно просто аккуратно составить функцию сравнения ключей. А какая разница с точки зрения big/little endian или переносимости кода? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| afx33sd |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.8.2013 Репутация: нет Всего: нет |
Это да
Например, для:
битовые поля для little-endian, раздаются с "одного конца" байта, а для big-endian наоборот, собственно для unsigned a:16 аналогично, поправьте если не так |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
afx33sd, если ты не используешь union, то тебе должно быть по барабану.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |