Использование ntohl на Struct или Union - PullRequest
1 голос
/ 26 октября 2011

ntohl занимает uint32_t. У меня есть сообщения с различными участниками (типа uint32_t или uint16_t). Можно ли правильно передать все полученные struct или union и преобразовать их, чтобы сказать uint32_t, а затем reinterpret_cast в мои union или struct?

Как я это делал, перечисляю, построчно, каждого отдельного члена union или struct и передавая его ntohl / s, как это msg.member = ntohl(msg.member);, но это громоздко!

Структуры данных в целом переносятся из приложения C # .NET (Windows) в приложение Linux.

Когда я пытался,

void* ptr = &msg;
uint32_t temp = (uint32_t)ptr;

Компилятор жалуется, что:

ошибка: приведение от 'void *' к 'uint32_t' теряет точность

Ответы [ 2 ]

6 голосов
/ 26 октября 2011

Нет, вы не можете.Только в том случае, если ваша структура содержит только одну переменную uint32_t.Кроме того, вы должны использовать разные функции ntoh<X> в зависимости от размера переменных.

0 голосов
/ 26 октября 2011

Вы можете использовать Google Protocol Buffers .

...