Проблемы с записью инфы из одной структуры в другую
От: Аноним  
Дата: 29.06.04 12:01
Оценка:
Как в структуру
struct1 {ushort x:8;ushort y:8}
запихнуть данные из другой структуры
struct2 {ushort x:4;ushort y:4; ushort z:8}
без побитового копирования.
struct1 *A;
struct2 *B;
Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
Может метод какой-нибудь определить?
Re: Проблемы с записью инфы из одной структуры в другую
От: Glоbus Украина  
Дата: 29.06.04 12:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как в структуру

А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?

ну типа


A& operator = ( const B& _value )
{
........
}
Удачи тебе, браток!
Re: Проблемы с записью инфы из одной структуры в другую
От: Вадим Никулин Россия Здесь
Дата: 29.06.04 12:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как в структуру

А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?

Определить метод присваивания:
   struct1 &operator = ( const struct2 &rgt )
   {
      memcpy( this, &rgt, std::min( sizeof(*this), sizeof(rgt) ) );
   }


Но это катит только для POD-типов
Re: Проблемы с записью инфы из одной структуры в другую
От: Анатолий Широков СССР  
Дата: 29.06.04 12:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как в структуру

А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?

Можно использовать union на свой страх и рист (по причине UB):

union 
{
   S1 a;
   S2 b;
} u;
u.b = *B;
u.a.x = 1;
Re: Проблемы с записью инфы из одной структуры в другую
От: Вадим Никулин Россия Здесь
Дата: 29.06.04 12:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как в структуру

А>struct1 {ushort x:8;ushort y:8}
А>запихнуть данные из другой структуры
А>struct2 {ushort x:4;ushort y:4; ushort z:8}
А>без побитового копирования.
А>struct1 *A;
А>struct2 *B;
А>Конверсия типов *A=(struct1)*B — не работает, хотя, в принципе размер структур один и тот же.
А>Может метод какой-нибудь определить?

Еще прокатит:
*A=(struct1&)*B;

, или, более по-научному, но все еще коряво:

*A = reinterpret_cast<struct1&>( *B );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.