| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > Как передавать char* по сети? |
| Автор: eXa 25.1.2008, 16:25 | ||||||||||
При проверке в сеть отправляется следующее:
а должно
откуда вылезает лишний байт? я думаю что это дело в выравнивании, можете пояснить?
и как правильно чар передавать? поидее по таблице ascii должен отправить символы, а отправляются нули
|
| Автор: JackYF 25.1.2008, 17:30 | ||||
это указатель. Памяти выделять кто-будет? заводи константу типа
в неё
И тогда заработает. |
| Автор: eXa 25.1.2008, 17:58 |
| Да! Точно! Спасиб! Осталось избавиться от лишних байт. Ведь же это в выравнивании дело, да? хотя нее... странно получается он выделяет 8 байт под тип WORD *code* BYTE t1; BYTE t2; WORD t3; WORD t4; DWORD t5; WORD t6; WORD t7; CHAR t8[10]; packet.t1 = 0x2A; packet.t2 = 0x01; packet.t3 = 0xA401; packet.t4 = htons(30); packet.t5 = htons(1); packet.t6 = htons(1); packet.t7 = htons(len); strcpy(packet.t8, "test"); *endcode* -------------- 2A 01 A4 01 00 5E 00 00 00 01 00 00 00 01 00 04 74 65 73 74 ------------- |
| Автор: JackYF 25.1.2008, 19:25 |
это 4-е байта и дело действительно в выравнивании, поставь нужную прагму компилятору |
| Автор: eXa 25.1.2008, 20:26 | ||||||
извеняюсь за не точность
не просто поставить, а ещё с параметром подходящий для моей структуры, вот чтот нашёл,читаю, попробывал, но никак не могу вникнуть, как определить какое выравнивание мне нужно? Выравниваю так, запись идёт также
|
| Автор: JackYF 25.1.2008, 22:10 |
выравнивание в таких случаях ставится 1 байт. Добавлено через 20 секунд #pragma pack(push, 1) |
| Автор: eXa 26.1.2008, 01:23 |
| при выравнивании на 1(пробывал и 2, 4, 6, 8, 16) байт dword может принимать при отправке такое 00 00 01 00 значение и такое при конвертации htons 00 00 01 00, а мне надо 00 00 00 01 |
| Автор: eXa 26.1.2008, 14:12 | ||
Код:
Вывод: 2A 01 01 A4 00 58 00 01 00 00 00 01 00 04 74 65 *....X........te 73 74 st |
| Автор: JackYF 26.1.2008, 15:12 |
htonl, потому что DWORD |