C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Подскажите пожалуйста!, замена union / struct на vector
Benish
Отправлено: 11.01.2005, 12:27


Дежурный стрелочник

Группа: Участник
Сообщений: 67



Подскажите пожалуйста!

Ранее в программе было:

CODE


#pragma pack(push)
#pragma pack(1)  
       struct wpa {
           unsigned __int16 begin;
           unsigned __int8 Pstea;
           unsigned __int16 Pga;
           unsigned __int8 Csum;
           unsigned __int16 end;
           };
#pragma pack(pop)

       union su {
           byte Buffer [MAXNBS];
           struct wpa w;} st;


Можно ли это заменить на vector учитывая то, что доступ к ячейкам нужен и как к byte и как к word?
Benish
Отправлено: 11.01.2005, 14:18


Дежурный стрелочник

Группа: Участник
Сообщений: 67



Бог с ними со struct/union.
Вопрос изменился.
Можно каким либо образом с vector word работать как с vector byte?
Benish
Отправлено: 11.01.2005, 14:34


Дежурный стрелочник

Группа: Участник
Сообщений: 67



Вопрос закрыт.
Что-то я после праздников никак в себя не приду. sad.gif
xTrim
  Отправлено: 11.01.2005, 14:56


Машинист паровоза

Группа: Участник
Сообщений: 208



а че, нормально так поговорили wink.gif
Benish
Отправлено: 11.01.2005, 16:46


Дежурный стрелочник

Группа: Участник
Сообщений: 67



Нет, а все таки!
Можно как-нибудь ловко пересыпать vector word в vector byte, а потом обратно???
Guest
Отправлено: 11.01.2005, 17:34


Не зарегистрирован







Я чет не пойму что Вы хотите, уточните что за byte и что за word.
Benish
Отправлено: 11.01.2005, 18:05


Дежурный стрелочник

Группа: Участник
Сообщений: 67



Есть последовательный контейнер vector типа word (unsigned short). Этот контейнер хочется передать в vector типа byte (unsigned char) и побайтово обработать. Просто получается ситуация, что загружать в контейнер удобнее словами, а обрабатывать нужно байтами.


Benish
Отправлено: 12.01.2005, 13:12


Дежурный стрелочник

Группа: Участник
Сообщений: 67



При

CODE

   Word v[3] = {0x1122,0x3344,0x5566};
   vector<Word> V1(v, v+3);
   vector<byte> V2(V1.begin(),V1.end());



в V2 попадают числа 22,44,66 причем количество элементов вектора =3

что вообщем-то и понятно.

В памяти V1 занимает 3х4=12 байт: 00001122, 00003344, 00005566 т.е при преобразовании типа word в byte значащим окажется только младший байт: 0000хх22, 0000хх44, 0000хх66.

Выравнивание не помогает.
CODE

#pragma pack(push)
#pragma pack(1)  
.........................
#pragma pack(pop)

Asher
Отправлено: 12.01.2005, 15:17


Мастер участка

Группа: Модератор
Сообщений: 550



берете первый элемент и приводите его к указателю на unsigned char.

(unsigned char*)&(*my_vector.begin()))[e_Idx];};//
контроля границ нет, так что не превышайте e_Idx размер my_vector.size() * sizeof(тип инстанцирования вектора)
Guest
Отправлено: 12.01.2005, 16:40


Не зарегистрирован







Спасибо!
Я бы до такого не додумался. wink.gif

Вернуться в Вопросы программирования в C++Builder