LINUX.ORG.RU

#pragma pack(1) - включить
#pragma pack(0) - выключить
Писано по памяти...

vodz ★★★★★
()

Не делай этого. Никогда. Это совершенно непортабельно, да и просто глупо. Ты бы лучше объяснил, на хрен такую лажу собрался делать, и тебе расскажут, как все сделать правильно.

vsl
()

Совершенно верно - непортабельно! Но если это делается, например для упаковки и передачи по сети, то некий смысл наблюдается. Хотя это гораздо техничней сделать через memcpy:) в буфер длинной 9 байт поэлементно.

nevera
()
Ответ на: комментарий от nevera

Вот как раз для передачи по сети и memcpy не катит. Словечки надо вручную из байтов собирать - дабы не было проблем с bigendian/littleendian на разных концах сокета. То есть, в пакованных структурах вообще нет никакого смысла - один лишь геморрой.

vsl
()

Последний раз когда сталкивался - декодинг .bmp. Перед этим - ускорение pc-эмулятора. (Натурально: в 1.5 раза получилось.) Не портабельна задача, но когда она уже поставленна - другие решения еще более непортабельны. Достаточно объявить #ifdef BIG_ENDIAN в объявлении структуры - получится более правильно, чем всякие извращения с memcpy.

vodz ★★★★★
()

to vsl: это уже частности сереализации данных и к упаковке не имеют никакого отношения. Естественно перед тем как запихивать через memcpy нужно повращать байты, но этож делается элементарно: man swab(3)...

nevera
()

Где vsl, там и базар...
Посмотри info gcc -> invocing GCC -> Code Gen Options
на предмет -fpack-struct.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.