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
|
Вопрос закрыт.
Что-то я после праздников никак в себя не приду. |
|
xTrim |
Отправлено: 11.01.2005, 14:56 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
а че, нормально так поговорили
|
|
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 |
|
Не зарегистрирован
|
Спасибо!
Я бы до такого не додумался. |
|