| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Правильное формирование пакета |
| Автор: REZiaMIX 25.5.2008, 14:32 | ||||||||
| Задача - сформировать правильный пакет , с полями постоянной длины: Буффер сообщения :
Есть структура:
Буффер для пакета:
Нужно заполнить какимто образом пакет , чтобы он выглядел следующим образом: Размер: 4 4 strlen(text) Структура: [packetheader] [ text ] Если сделать таким образом:
То выходит, что реальный размер head в памяти непостоянен и зависит от значений структуры. Как правильней сформировать пакет, чтобы можно было считать 4 байта(размер сообщения text),затем 4 байта тип пакета, затем текст в зависимости от заголовка пакета? |
| Автор: Sartorius 25.5.2008, 14:39 | ||
Это почему ты так решил? head - структура из двух int-ов. Где изменение размера? |
| Автор: REZiaMIX 25.5.2008, 15:11 | ||
Хм , нашел ошибку у себя в исходнике , подправил , все работает.
Действительно , ступил((( Спасибо, еще один вопрос(наверное глупый): Если передавать эту структуру по сети и например на поле packet_type выделять только 2 байта? что произойдет? или же как можно при условии например что число будет не более 100, уменьшить кол-во памяти занимаемое переменной? |
| Автор: Sartorius 25.5.2008, 15:15 | ||
unsigned char ом сделай. или вообще битовым полем. Семи бит будет достаточно. |
| Автор: mes 25.5.2008, 16:06 |
| struct packetheader{ unsigned char bytes :7;// итого 14 бит - но смысла нет так как выделится на структуру все равно 2 байта unsigned char packet_type :7;// поэтому :7 не нужно }; Добавлено через 2 минуты и 14 секунд однако если тебе нужен тип int то можно так struct packetheader{ int bytes :8; int packet_type :8; }; итого два байта на структуру с ограниченым местом под хранение значений |
| Автор: REZiaMIX 29.5.2008, 20:11 |
| Всем спасибо за ответы , проблема решена. |