IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Найти строку в 16-ричном представлении файла
Unconnected
сообщение 28.10.2008 18:51
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Нужно представить файл в шестнадцатеричном виде и найти в нём определённую текстовую строку. Вот что я смог:
var f:file of byte;
s,z,buf:string;
x:byte;
a,b,bufsize:integer;
begin
assignfile(f,'C:\***************************************************');
reset(f);
for a:=1 to filesize(f)-15 do
begin
for b:=a to a+14 do
begin
seek(f,b);
read(f,x);
s:=s+inttostr(x);
end;
bintohex(pchar(s),pchar(z),bufsize);
if z='**************' then begin
edit1.text:=z;
break;
end
else z:='';

end;

end;

По идее пограмма читает файл "порциями" по 14 символов(строка,которую надо найти,такой длины), потом переводит в шестнадцатеричный вид и, если строка соответствует нужной, останавливает цикл. Только не работает unsure.gif В делфях ещё мало понимаю,обьясните пожалуйста...


Сейчас ещё нашёл,что нужно в ASCII виде представить это...

Сообщение отредактировано: Unconnected - 28.10.2008 20:13


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Unconnected
сообщение 28.10.2008 21:48
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Volvo, использую код,предложенный тобой, перевёл нужную для поиска строку в HeX, убедился,что она есть в нужном файле(Hex-редактором)...не ищет почему-то... unsure.gif
Код
var f:file of byte;
    s,z,buf:string;
    x:byte;
    a,b,bufsize:integer;
begin
  assignfile(f,'C:\owner.mdb');
  reset(f);
  for a := 0 to filesize(f) - 21 do
  begin
    s := '';
    Seek(f, a);
    for b := 1 to 21 do
    begin
      read(f, X);
      s := s + IntToHex(X, 2);
    end;
    if s='55006e0063006f006e006e00650063007400650064' then begin
                                                                                                 edit1.text:=s;
                                                                                                  break;
                                                                                             end;


end;


А вот когда я в качестве S ввёл 00,то бишь точка, то нашло...


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 13:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"