Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как считать файл по битам ? [D6, WinXP]


Страницы:   1 2

Mischa_M ©   (2005-11-24 01:50:00) 

Здраствуйте.........
Подскажите пожалуйста каким образом можно считать файл по битам. Самое близкое к этому что у меня получается это считывание файла по байтам с помощью BlockRead(F, Buf, 1). Дальше я не знаю что делать. Помогите пожалуйста.
Зараннее благодарен.


SergProger   (2005-11-26 02:48:00) [1]

Вот две функции:

function DecToBin(Dec: Byte): Integer;
begin
 Result:=(Dec div 1 mod 2)+(Dec div 2 mod 2)*10+(Dec div 4 mod 2)*100
   +(Dec div 8 mod 2)*1000+(Dec div 16 mod 2)*10000
   +(Dec div 32 mod 2)*100000+(Dec div 64 mod 2)*1000000
   +(Dec div 128 mod 2)*10000000;
end;

function Bit(Bint: Integer; n: Byte): Byte;
begin
 Result:=Bint div Round(Exp((8-n)*Ln(10))) mod 10;
end;

DecToBin переводит байт в двоичную запись, Bit извлекает из двоичной записи байт по его индексу.


Германн   (2005-11-26 02:28:00) [2]

Автор сабжа, скорее всего, занят другими своими "хвостами", но
Прошу всех дезавуировать мой пост - Германн ©   (25.11.05 01:34) [15]. Он соответствует сабжу, но противоречит уоточнению задачи Mischa_M ©   (24.11.05 23:14) [7].

2 evvcom ©   (25.11.05 10:02) [25]
>После зашития программы в микропроцессор (микроконтроллер) ты скорее >всего уже не будешь читать данные с диска ни битами, ни байтами, ни >блоками. Они у тебя уже будут в памяти.

С учетом задачи, они всё таки будут как-то вводится в память. Конечно не битами, но, имхо, блоками.

>Или программа для программирования микрочипов уже и паскаль понимает?

"Программа для программирования" ничего, кроме двоичных данных не принимает, но компилляторы с Паскаля есть. И я уже тут постил "гневные высказывания" об одном из них. Хотя компилляторы С для 51-процессоров есть вполне приемлемые, если не учитывать оптимальность.

> И даже микроконтроллер будет читать из своей памяти не битами, а >байтами или даже группами байт (словами, двойными словами - зависит от >разрядности процессора) в свои регистры, а уж потом можно анализировать >определенные биты в регистрах.

Извини Слав, но тут ты не совсем прав. Термин "битовый процессор" существует не просто как аллегория. Он есть наяву.
Но вот с учётом данной задачи нужно работать именно с байтами. Имхо, я не знаю процессоров, которые допускают "косвенную адресацию" битов. :(

2 evvcom ©
Не прими вышеизложенное как упрёк в твой адрес. Просто ты помог мне уточнить ответ на задачу.


Anatoly Podgoretsky   (2005-11-25 18:57:00) [3]

Mischa_M ©   (25.11.05 02:20) [21]
По работе с файлами Паскаля, там же на моем сайте.


byte2str   (2005-11-25 17:46:00) [4]

Перевод байтов в биты:

function byte2str(B:byte):string;
var i:byte;
begin
    result:='';
    for i:=0 to 7 do
    begin
    if (B and 128)=128 then result:=result+'1' else result:=result+'0';
    B:=(B SHL 1);
    end;
end;

Caption:=byte2str(4);


LostDelpher   (2005-11-25 11:33:00) [5]

а может такой код
считываешь байт в переменную MyBite
для каждого байта

проверка есть ли на
етсь ли бит на 1 - м месте
a:=MyBite and 00000001
на втором
a:=MyBite and 00000010

и т.д. естественно если a>0 значит там есть бит - если 0 - значит нет...
тебе это нужно ?


evvcom   (2005-11-25 10:02:00) [6]

После зашития программы в микропроцессор (микроконтроллер) ты скорее всего уже не будешь читать данные с диска ни битами, ни байтами, ни блоками. Они у тебя уже будут в памяти. Ну и читай ты блок целиком и считай, что этот блок как бы уже в памяти МП. Ты же моделируешь. И этого блочного чтения у тебя потом уже не будет. А дальнейший алгоритм действительно лучше разрабатывать с учетом типа будущего микроконтроллера. Причем написать можно и на паскале, но потом разобраться с получившимся ассемблерным кодом. Или программа для программирования микрочипов уже и паскаль понимает?
И даже микроконтроллер будет читать из своей памяти не битами, а байтами или даже группами байт (словами, двойными словами - зависит от разрядности процессора) в свои регистры, а уж потом можно анализировать определенные биты в регистрах.


alex_***   (2005-11-25 09:37:00) [7]

почитай наконец про битовые операции - сдвиги, маски, вычитывай файл кусками, кратными 8 байт и обрабатывай их


Германн   (2005-11-25 02:54:00) [8]


> Mischa_M ©   (25.11.05 02:20) [21]
>
> Германн
> >Лично я бы в данной ситуации определил бы следующие два
> типа:
> TMyBits = (Bit0,Bit1,Bit2,...,Bit63);
> TSetOfMyBits = Set of TMyBits;
>
> ТО есть так...
>
> while not Eof(F) do          
> begin
> BlockRead(F, Buf, 1);
>
> А здесь мне как быть ?
>
> end;
> <Цитата>
> Mischa_M ©   (25.11.05 02:24) [22]
>
> Хотя в моём случае BlockRead(F, Buf, 8);


Это зависит от того, как ты объявил переменную F (File, File of TSetOfMyBits). И от того как ты прописал RESET(F,...).


Mischa_M   (2005-11-25 02:24:00) [9]

Хотя в моём случае BlockRead(F, Buf, 8);


Mischa_M   (2005-11-25 02:20:00) [10]

Германн
>Лично я бы в данной ситуации определил бы следующие два типа:
TMyBits = (Bit0,Bit1,Bit2,...,Bit63);
TSetOfMyBits = Set of TMyBits;

ТО есть так...

while not Eof(F) do          
begin
BlockRead(F, Buf, 1);

А здесь мне как быть ?

end;


Германн   (2005-11-25 02:02:00) [11]

Я же не просил кричать "Я САМЫЙ ВЕЛИКИЙ ВОЛШЕ...". Пардон, это уже было в каком-то детском "кине".


Mischa_M   (2005-11-25 01:49:00) [12]

ЭТО МОЯ МАГИСТРСКАЯ РАБОТА :)))))))


Германн   (2005-11-25 01:48:00) [13]

Вот! Наконец-то произнесено ключевое слово "препод". Так бы сразу и говорил.


>  А голосовые данные уже потом на процессоре.


Уточни предмет препода. Если это "Микропроцессоры", то тебе придётся делать две разные работы. Одну на Паскале, вторую на МК.


Mischa_M   (2005-11-25 01:41:00) [14]

Германн, мне препод сказал что бы я сначала ето всё промоделировал на компе на примере wav файла. То есть нужно зашифровать wav файл пока. А голосовые данные уже потом на процессоре.
Но всё равно спасибо тебе за помощь :)


Германн   (2005-11-25 01:35:00) [15]


> Mischa_M ©   (25.11.05 01:27) [14]


Удали пробел между "...html&file_i" и "d=app-bits"


Германн   (2005-11-25 01:34:00) [16]

Лично я бы в данной ситуации определил бы следующие два типа:
TMyBits = (Bit0,Bit1,Bit2,...,Bit63);
TSetOfMyBits = Set of TMyBits;

Затем читал бы файл блоками по 8 байт в переменную типа TSetOfMyBits (или  уже считанный файл разбирал бы этими же блоками копируя в такую же переменную).

Хотя если вспомнить

> Потом эта прога(скорее этот алгоритм) будет зашит в процессор.


я бы разрабатывал этот алгоритм с учетом системы команд конкретного микропроцессора.


Mischa_M   (2005-11-25 01:27:00) [17]

Anatoly Podgoretsky было бы хорошо если бы она открылась .та ссылка. А зайдя насайт искать буду до утра :)))


Германн   (2005-11-25 00:59:00) [18]

1. TBits не подойдет?
2. Set of 0..7 не подойдет?


Anatoly Podgoretsky   (2005-11-25 00:59:00) [19]

Если тебе нужен доступ к битам по полученым байтам, то посмотри эту статью - http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html&file_id=app-bits


Mischa_M   (2005-11-25 00:57:00) [20]

Anatoly Podgoretsky вы не поняли. Мне нужен именно доступ к битам, т.к. нужно каждый из них поставить на раннее определённую мною битовую позицию.
Там что то Amoeba говорил про это. Нельзя ли поподрбнее. Я не программист. Я связист.
Зараннее спасибо.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо