Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами, побайтно 
:(
    Опции темы
Dedal
Дата 6.5.2004, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.5.2004

Репутация: нет
Всего: нет



Вопрос такой. Может кто подскажет. Надо открыть файл BMP. С этим-то проблем нет. Но как, допустим, в 2000-м(или любом другом) байте младший бит обнулить? Сделать это надо наложением маски вида 11111110 путем логического умножения.
PM MAIL   Вверх
p0s0l
Дата 6.5.2004, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Код
var
 f : file;
 b : byte;
begin
 AssignFile(f, 'c:\111.bmp');
 Reset(f, 1);
 Seek(f, 2000);
 BlockRead(f, b, SizeOf(b));
 Seek(f, 2000);
 b := b and $FE;
 BlockWrite(f, b, SizeOf(b));
 CloseFile(f);
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
Crane
Дата 9.4.2005, 16:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можно ли файл читать по битно, получается геморно раскладывать считанный байт на биты для послудующего их изменения, нужно весь файл перебрать побитно для применения хитрого скремблера к каждому прочитанному биту. Должен же быть способ через функции MS-DOS, или со вставками на ассемблере или еще как, но должно же быть решение подскажите!
  Вверх
Snowy
Дата 11.4.2005, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Crane @ 9.4.2005, 16:54)
Можно ли файл читать по битно

Нет. Операционная система позволяет читать только блоками, размер которых указывается в байтах.
Соответственно минимальная единица считываемой информации = 1 байт.
Но оптимально читать большими блоками (лучше сразу весь файл) и работать с байтами уже в памяти.

Добавлено @ 08:54
Кроме того нет типа данных для хранения одного бита. Все равно вся работа идет минимум с байтом.
PM MAIL   Вверх
EKoshelev
Дата 14.4.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



p0s0l, глядя на твой код мне почему-то кажется что после всех дел, которые ты там описал файл станет длиной 2000 б. Хотя я на 100% не уверен. А ты уверен, что он останется прежней длины???


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Snowy
Дата 14.4.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Файл останентся той длины, которой был, если до этого он был длиннее, чем 2000.
Задача стояла - изменить 2000-й байт.
PM MAIL   Вверх
Dr.No_xXx
Дата 14.4.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



Как вариант мона сделать так.В каждом байте хранится 8 бит.То есть в этих 8 битах хранится код байта.Мона впринципе,при знании кодов,просто выводить инфу в битах.
PM MAIL   Вверх
Snowy
Дата 14.4.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Dr @ 14.4.2005, 13:54)
Мона впринципе,при знании кодов,просто выводить инфу в битах.

Куда выводить? Зачем??
Человеку нужно изменить один или несколько бит в файле.
Тут только один путь - цитаешь нужный байт, меняешь в нем нужный бит и пишешь его назад.
PM MAIL   Вверх
Dimannn
Дата 15.4.2005, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

Репутация: нет
Всего: 1



Попробуй так
Код

Type Bit= ^Boolean;

procedure TForm1.Button1Click(Sender: TObject);
Var H1,h2: THandle;
    Base, P: Bit;
begin
H1:=FileOpen('filename',fmOpenReadWrite);
h2:=CreateFileMapping(H1,nil,0,0,0,nil);
Base:=MapViewOfFile(h2,PAGE_READWRITE,0,0,0);
P:=Base;

P:=Pointer(Integer(P)+SizeOf(Boolean)*2332) //Доступ к биту № 2332
P^:=not(P^);  //Инвертирование бита

UnmapViewOfFile(Base);
CloseHandle(h2);
CloseHandle(H1);
end;


Это сообщение отредактировал(а) Dimannn - 15.4.2005, 10:06


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
<Spawn>
Дата 15.4.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Dimannn Зачем такие извращения? И при чем тут изменение байт(Boolean имеет размер 1 байта, а не бита!!!!)? Уже все давно распиали. Зачем постить код, не имея представления о том, что он делает?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1224 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.