![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как считать файл по битам ? [D6, WinXP]
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 говорил про это. Нельзя ли поподрбнее. Я не программист. Я связист.
Зараннее спасибо.