|
|
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
Добрый день. Имеется битовый массив char * mask1; mask1 = new char[Mask1Size]; Мне надо убрать из массива (к примеру) биты от 15 до 23. для этого я создаю новый массив, на заданное числи меньше чем первый. char * mask2; mask2 = new char[Mask2Size] прохожу по каждому байту и проверяю какие биты установленны и записываю их в новый массив (пропуская биты с 15 по 23) может кто подскажет более элегантный вариант копирования битовых массивов с исключением данных битов?? А то я ничего не могу придумать :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 20:44 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
kutuzovможет кто подскажет более элегантный вариант копирования битовых массивов с исключением данных битов?ну если только перейти к операциям с байтами... Например, в данном случае первый байт явно останется неизменным, т.е. незачем разбирать его по битам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 20:50 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 22:36 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
Загнать в битмап, а потом выбрать из него что надо в новый массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 09:54 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
Например так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Есстественно mask2 предварительно очистить. Примерно так, насчет индексов надо проверить. Выглядит страшновато, зато красиво и элегантно. Можно как-то сделать красивее, учитывая, что cutTo-cutFrom+1 == Mask1Size-Mask2Size ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 10:14 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
AkhНапример так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Есстественно mask2 предварительно очистить. Примерно так, насчет индексов надо проверить. Выглядит страшновато, зато красиво и элегантно. Можно как-то сделать красивее, учитывая, что cutTo-cutFrom+1 == Mask1Size-Mask2Size Спасибо за ответ, вычисляю Mask1Size, и в строчке bitset<Mask1Size> bOld; получаю: Template argument must be a constant expression Как это исправить?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 21:36 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
kutuzov AkhНапример так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Есстественно mask2 предварительно очистить. Примерно так, насчет индексов надо проверить. Выглядит страшновато, зато красиво и элегантно. Можно как-то сделать красивее, учитывая, что cutTo-cutFrom+1 == Mask1Size-Mask2Size Спасибо за ответ, вычисляю Mask1Size, и в строчке bitset<Mask1Size> bOld; получаю: Template argument must be a constant expression Как это исправить?? Mask1Size должено быть числом, макросом или константной переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 09:35 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
Akh kutuzov AkhНапример так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Есстественно mask2 предварительно очистить. Примерно так, насчет индексов надо проверить. Выглядит страшновато, зато красиво и элегантно. Можно как-то сделать красивее, учитывая, что cutTo-cutFrom+1 == Mask1Size-Mask2Size Спасибо за ответ, вычисляю Mask1Size, и в строчке bitset<Mask1Size> bOld; получаю: Template argument must be a constant expression Как это исправить?? Mask1Size должено быть числом, макросом или константной переменной. Я пишу: const int Mask1Size=OldSize; bitset<Mask1Size> bOld; Template argument must be a constant expression Или это не константная переменная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 10:06 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
kutuzov Я пишу: const int Mask1Size=OldSize; bitset<Mask1Size> bOld; Template argument must be a constant expression Или это не константная переменная для OldSize такие же ограничения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 10:37 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
Akh kutuzov Я пишу: const int Mask1Size=OldSize; bitset<Mask1Size> bOld; Template argument must be a constant expression Или это не константная переменная для OldSize такие же ограничения. т.е. OldSize сделать const? так она же динамически меняется :( размер bitset надо как константу задать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 10:56 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
kutuzovразмер bitset надо как константу задать? Да. Размер используется не только при выполнении, но и на стадии компиляции программы. Тогда задай с запасом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 11:30 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
White Owl Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Тогда такой вареант более преемлим... да и побыстрее наветное работать будет... Этот пример для переменной(DWORD). А у меня указатель на на массив известной длинны(UINT8 *mask). задача состоит в том чтобы из этого убрасть с 15-25 бит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 14:37 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
kutuzovТогда такой вареант более преемлим... да и побыстрее наветное работать будет... Этот пример для переменной(DWORD). А у меня указатель на на массив известной длинны(UINT8 *mask). задача состоит в том чтобы из этого убрасть с 15-25 бит. Ну так сформируй DWORD из массива и все. Добавь в мой пример строку: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 19:09 |
|
||
|
Битовый массив
|
|||
|---|---|---|---|
|
#18+
White Owl kutuzovТогда такой вареант более преемлим... да и побыстрее наветное работать будет... Этот пример для переменной(DWORD). А у меня указатель на на массив известной длинны(UINT8 *mask). задача состоит в том чтобы из этого убрасть с 15-25 бит. Ну так сформируй DWORD из массива и все. Добавь в мой пример строку: Код: plaintext Не очень я понимаю :) Это сработает в том случае если массив меньше 4 байт... Реально так выглядит. char * mask; ... MaskSize=150; mask = new char[MaskSize]; ... // функция вырезающая биты от m до n. т.е. Если надо вырезать 16 бит то размер нового // массива должен быть 148 CutMask(m,n) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 19:36 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=313&tid=2029621]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 368ms |

| 0 / 0 |
