[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
1.
>typedef union {
> unsigned long AsLong;
> unsigned char AsBytes[sizeof(long)];
>} LongUnion;
>LongUnion myLong;
>myLong.AsLong; /* это как длинное целое */
>myLong.AsBytes[0] /* а это байт длинного целого, хранимый по младшему адресу */
А уверены что байт? Есть машины, где это 2 байта, а кое где даже 4 :)
В этом варианте работает.
В вашем первом примере я прицепился к тому, что вы складываете размеры элементов структуры, а правильно брать sizeof(my_struct).
Но сериализацию так не делают.
--**--
2.
И что мы получим в коде? Жуткое нагромождение директив условной компиляции + необходимость писать проблемный код много раз?
--**--
3.
Ага. Именно void* возвращается malloc.
Только это динамическое выделение памяти, что, мягко говоря, не быстро.
Если мы точно знаем сколько памяти нам понадобиться, но не знаем под что - тогда и применяем union - память выделяется статически и ровно столько, сколько нужно (если мы, конечно, не пытаемся запихать в union char и массив из пары сотен long).
ЗЫ: закрываем дискуссию. Я больше на эту ветку не ходок
E-mail: info@telesys.ru