Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> uint16_t и переносимость, uint16_t в структуре 
:(
    Опции темы
afx33sd
Дата 20.8.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.8.2013

Репутация: нет
Всего: нет



У меня есть структура, например такая:
Код

struct {
          uint32_t ip;    
          uint16_t port;                                    
}

Структура не упакованная. Вопрос в том, будет ли она она переносима на различные платформы (вопрос о big/little-endian). Меня смущает тип uint16_t.
Хочу сделать это структуру ключом для map. Думаю, если упаковывать, то придется морочиться с big/little endian, а этого не хочется.
PM MAIL   Вверх
SenkraD
Дата 20.8.2013, 10:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



Я так понимаю, что это внутренняя структура, которая нужна для хранения настроек и которую не будут передавать по сети в виде последовательности байтиков, ведь так? если да, то не вижу никаких проблемм. если нужно передавать ее по сети, то пишите сериализацию/дезериализацию или возьмите готовую, главное ее по сети не передавать, как в примере ниже:
Код

send(_socket, &config, sizeof(config))

так как так у вас появятся проблеммы при передаче между разными платформами


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
feodorv
Дата 20.8.2013, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(afx33sd @  20.8.2013,  11:38 Найти цитируемый пост)
будет ли она она переносима на различные платформы (вопрос о big/little-endian)

Всё зависит от того, будете вы экземпляры этой структуры гонять по сети или сохранять на диск ("как есть"). Если нет - то какие проблемы?

Цитата(afx33sd @  20.8.2013,  11:38 Найти цитируемый пост)
то придется морочиться с big/little endian

А то, что у Вас размер структуры не выровнен, это Вас не смущает? Вместо uint16_t для номера порта можно использовать uint32_t, тогда смущение типом uint16_t пропадёт))) Да и ключ для map более правильный будет...

Всё-таки, опишите задачу поподробнее. IP/port намекает, что в крайнем случае эту пару всегда можно хранить в сетевом порядке байт.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
afx33sd
Дата 20.8.2013, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.8.2013

Репутация: нет
Всего: нет



Передавать не буду, нужно чтобы была переносимость между платформами.
Как я понимаю uint16_t - это не то же самое, что unsigned a:16, то есть все в порядке. Спасибо.

К реальной задачи пост относится косвенно, хотелось разобраться.
Цитата
Да и ключ для map более правильный будет...

Это почему? И так и так - 4 байта.

Ключ для map достоин отдельной ветки обсуждения: http://forum.vingrad.ru/index.php?showtopi...t&p=2579158
PM MAIL   Вверх
feodorv
Дата 20.8.2013, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(afx33sd @  20.8.2013,  12:35 Найти цитируемый пост)
Это почему? И так и так - 4 байта.

Потому что 2 байта, используемые для дозаполения структуры, могут нести совершенно случайную информацию, и нужно просто аккуратно составить функцию сравнения ключей.

Цитата(afx33sd @  20.8.2013,  12:35 Найти цитируемый пост)
Как я понимаю uint16_t - это не то же самое, что unsigned a:16

А какая разница с точки зрения big/little endian или переносимости кода?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
afx33sd
Дата 20.8.2013, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.8.2013

Репутация: нет
Всего: нет



Цитата
нужно просто аккуратно составить функцию сравнения ключей

Это да
Цитата
А какая разница с точки зрения big/little endian или переносимости кода?

Например, для:
Код

uint8_t a:2;
uitn8_t a:6;

битовые поля для little-endian, раздаются с "одного конца" байта, а для big-endian наоборот, собственно для unsigned a:16 аналогично, поправьте если не так
PM MAIL   Вверх
bsa
Дата 20.8.2013, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



afx33sd, если ты не используешь union, то тебе должно быть по барабану.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.