|
|
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
Существует ли сабж? Или как его ручками написать. Задача: иметь возможность читать из файла и писать в него по 1 биту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 19:00 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
Бред в постановке задачи. Все равно ведь читать придется не один бит, с диска читается как минимум кластер, а реально не меньше 64К. Вот и прочтите в буфер, а потом работайте как с битовым массивом. ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 20:03 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
Можно поискать исходники freeware архиваторов. Или примеры реализации кодеков Хаффмена. Там обязательно должна быть библиотечка для чтения-записи битов из потока-файла. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 10:30 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
DesilСуществует ли сабж? Или как его ручками написать. Задача: иметь возможность читать из файла и писать в него по 1 биту. Я в институте писал для работы с BW-битмапами. Основной принцип там был такой - имеешь буфер из байтов. Имеешь номер бита который надо установить/сбросить. Результат целочисленного деления номера бита на CHAR_SIZE - это номер байта. Остаток - это номер бита. Если бит надо установить, делаешь маску и накладываешь ее на байт через OR. Если сбросить, делаешь инверсную маску и накладываешь ее на байт через AND. Если надо проверить состояние бита, накладываешь маску через AND и проверяешь на нулевой/ненулевой результат. Потом я читал Саттера, там такой подход был раскритикован и взамен было рекомменодовано использовать std::bitset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 11:42 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
;Аргументы: <Указатель>,<ПозБита> ;т.е. ;push ПозБита ;push Указатель BitSet proc mov eax,[ESP+8]; адрес в eax xor edx,edx ;подготовка к делению xor ecx,ecx mov cl,32 div cx xchg ax,dx mov ecx,[ESP+4] bts [ecx+edx*4],eax ; btr - для ресета, btc - для инверсии ret 8 BitSet endp и классы тебе не нужны. ЗЫ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 11:58 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
Borya7;Аргументы: <Указатель>,<ПозБита> ;т.е. ;push ПозБита ;push Указатель BitSet proc mov eax,[ESP+8]; адрес в eax xor edx,edx ;подготовка к делению xor ecx,ecx mov cl,32 div cx xchg ax,dx mov ecx,[ESP+4] bts [ecx+edx*4],eax ; btr - для ресета, btc - для инверсии ret 8 BitSet endp и классы тебе не нужны. ЗЫ. Ну и в чем смысл? Вот исх. код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вот что нагенерировал компилятор VC7. По-моему неплохо учитывая то что возможности у функции шире. PUBLIC ?setBit@@YAXPAE_K_N@Z ; setBit _TEXT SEGMENT _buff$ = 8 ; size = 4 _pos$ = 12 ; size = 8 _val$ = 20 ; size = 1 ?setBit@@YAXPAE_K_N@Z PROC NEAR ; setBit, COMDAT mov ecx, DWORD PTR _pos$[esp-4] mov edx, DWORD PTR _pos$[esp] mov eax, ecx shrd eax, edx, 3 shr edx, 3 mov dl, BYTE PTR _val$[esp-4] and ecx, 7 push esi mov esi, DWORD PTR _buff$[esp] test dl, dl mov dl, 1 je SHORT $L81404 shl dl, cl or BYTE PTR [eax+esi], dl pop esi ret 0 $L81404: shl dl, cl mov cl, BYTE PTR [eax+esi] not dl and cl, dl mov BYTE PTR [eax+esi], cl pop esi ret 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 13:20 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич, вы не поняли в чем смысл? Да это же то, что вы сами говорили, это то что мы все делали в институте. Просто OR, AND заменил другими инструкциями. Функцию не обязательно делать универсальной, она и так маленькая, просто нужно иметь отдельную функцию для снятия бита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2005, 09:10 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
Borya7Сергей Ильич, вы не поняли в чем смысл? Да это же то, что вы сами говорили, это то что мы все делали в институте. Какой смысл это делать на ассемблере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2005, 17:01 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
А кто сказал что в Сиях нет встроенного ассемблера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 06:26 |
|
||
|
Класс для работы с файлом на битовом уровне
|
|||
|---|---|---|---|
|
#18+
Borya7А кто сказал что в Сиях нет встроенного ассемблера? Ассемблер может и есть, но вопрос был - зачем его использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 16:22 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33398596&tid=2032392]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 385ms |

| 0 / 0 |
