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

> ВНИМАНИЕ!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Найти строку в 16-ричном представлении файла
сообщение
Сообщение #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 -


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


Гость






BinToHex не делает того, чего ты хочешь... Эта процедура берет число (число, а не строку), и возвращает его представление в 16-ричной СС. Тебе что найти-то надо? Файл байтов, допустим, начинается сочетанием байт со значениями от 1 до 14... Тогда приведенная к 16-ричному представлению эта последовательность будет иметь вид:
0102030405060708090A0B0C0D0E
Ты будешь искать строки, заданные именно в таком виде? Тогда вот так:
  if OpenDialog1.Execute then begin
assignfile(f, OpenDialog1.FileName);
reset(f);
for a := 0 to filesize(f) - 14 do begin
s := '';
Seek(f, a);
for b := 1 to 14 do begin
read(f, X); { <--- Читаем побайтно и сразу переводим в Hex... }
s := s + IntToHex(X, 2); { <--- ... и складываем в строку }
end;

if s = '0102030405060708090A0B0C0D0E' then begin
// нашли строку, делай что нужно
end;

end; // for a
end; // OpenDialog.Execute
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 3.05.2024 0:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name