Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 21:59   #11
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
А строки сравнивать кто корректно будет? Компилятор? IntToStr вернет строку без нулей впереди, поэтому у вас ничего найдено не будет. Может s хотя бы в Integer преобразовать? И да, в цикле до FS.Size-1. И если что-то искать, может в AnsiString загрузить файл вместо FileStream? Тогда и поиск будет легче с помощью pos, copy, delete и т.д. И тот же байт меняется заменой i-го символа в строке простым присвоением.
Вот этот вариант лучше
Код:
var
  FS: TFileStream;
  Value: AnsiString;
begin
  FS := TFileStream.Create(ExtractFilePath(GetModuleName(0)) + '00000000000000000.prf', fmOpenRead or fmShareDenyWrite);
  try
    SetLength(Value, FS.Size);
    FS.ReadBuffer(Pointer(Value)^, Length(Value));
  finally
    FreeAndNil(FS);
  end;
 
  if Pos(Edit1.Text, Value) <> 0 then ShowMessage('Найдено');
Только нужный Offset не найден, очевидно из-за того, что файл имеет другой вид при данном способе загрузки.

Последний раз редактировалось Shouldercannon; 19.04.2012 в 22:12.
Shouldercannon вне форума Ответить с цитированием
Старый 19.04.2012, 22:10   #12
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Файл имеет тот же вид, вы неверно ищете. '00002592' - это HEX-значение. А байты в строке у вас не HEX. Преобразуйте '00002592' в бинарную строку (4 байта здесь будет) и ищите именно ее в вашем Value.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 19.04.2012, 22:51   #13
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Запутался. 00002592 - это смещение (Offset - в переводе с английского) или указатель на строку, в которой нужно искать значения. Вот ещё раз вырезка из скрина, который находится в моём первом посте.
Функция преобразования данных Edit1.Text в двоичный вид, которую я использую:
Код:
function StrToBin(Input: integer): string;
var
  i: integer;
  WorkStr: string;
begin
  while Input > 1 do
  begin
    WorkStr := WorkStr + IntToStr(Input mod 2);
    Input := Input div 2;
    if Input = 1 then WorkStr := WorkStr + '1';
  end;

  for i := Length(WorkStr) - 1 downto 0 do Result := Result + WorkStr[i];
end;
Изображения
Тип файла: jpg pic2.jpg (72.4 Кб, 64 просмотров)

Последний раз редактировалось Shouldercannon; 19.04.2012 в 22:53.
Shouldercannon вне форума Ответить с цитированием
Старый 19.04.2012, 23:08   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это смещение и согласно картинке в десятичном виде. FS.Position:=2592; В следующих 16 байтах: 07 со смещением 2597, 02 - 2601, 01 - 2605. И нет тут никакого HEX-редактора, просто перезапись нужных байтов по заданным смещениям
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 19.04.2012 в 23:12.
Аватар вне форума Ответить с цитированием
Старый 20.04.2012, 10:08   #15
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Исходя из этого, способ загрузки остаётся тем же, только загруженное содержимое требуется перевести в десятичный вид и дальше позиционироваться на нужном Offset. Я правильно понимаю?
В прикреплённом файле показано содержимое
Код:
Value: AnsiString;
с загруженным в него файлом.
Вложения
Тип файла: txt Содержимое Value.txt (16.5 Кб, 130 просмотров)

Последний раз редактировалось Shouldercannon; 20.04.2012 в 10:29.
Shouldercannon вне форума Ответить с цитированием
Старый 20.04.2012, 10:50   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Примерно в этом направлении. FileStream создать с полномочиями на чтение/запись. Никакого перевода в десятичный вид
Код:
var b: Byte;

FS.Position:=2597;  //позиционирование для редактирования байта с 07
b:=$17;
FS.Write(b,1); //вставили новое значение в байт со смещением 2597
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.04.2012, 12:06   #17
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Аватар
Спасибо. То, что нужно.
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактор формул средствами стандартных компонентов Delphi 7 Romasant Мультимедиа в Delphi 0 18.01.2012 12:25
Hex редактор nohcho Свободное общение 4 08.05.2011 02:05
hex-редактор Jakob1993 Помощь студентам 2 24.10.2010 20:54
HEX редактор Simply-Art Помощь студентам 1 08.12.2007 13:18
Подскажите HEX редактор. Simply-Art Свободное общение 5 14.08.2007 17:33