Лидеры

ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт


ID: 226425

Konstantin Shvetski

Модератор


ID: 401284

Михаил Александров

Советник


ID: 137394

Megaloman

Мастер-Эксперт


ID: 400669

epimkin

Профессионал


ID: 401888

puporev

Профессор


ID: 405239

al4293189

4-й класс


8.13.11

14.01.2022

JS: 2.13.38
CSS: 4.8.5
jQuery: 3.6.0
DataForLocalStorage: 2022-01-27 07:16:01-standard


Консультация онлайн # 177659

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Dimon4ik
Дата: 04.04.2010, 03:31 Консультация закрыта
Поступило ответов: 1
Добрый вечер Уважаемые эксперты.
Пожалуйста, подскажите.
Возможна ли работа на Delphi 7 с бинарными файлами. А именно с их шестнадцатеричными кодами?
Например, возможно ли в определенном файле в ячейке по адресу 134749h прочесть значение двух шестнадцатеричных чисел и записать в него новое значение, например 0Ah.

Ответ # 1, Тимошенко Дмитрий (Посетитель)

Здравствуйте, Dimon4ik.

Примерно так:
Код
procedure TForm1.Button1Click(Sender: TObject);
  var f: file of byte; // Объявляем файловую переменную
      buf1,buf2: byte; // Временные значения
begin
  assignFile(f,'c:\neon.avi'); // Связываем переменную с конкретным файлом
  reset(f);          // Открываем существующий файл
  seek(f,$134749);   // Переходм к заданной позиции
  read(f,buf1);      // в BUF1 считываем значение из текущей позиции
  seek(f,$134749);   // Переходм снова к заданной позиции т.к. указатель сместился
  buf2:=$0A;         // Задаем значение для записи
  write(f,buf2);     // записываем его в файл
  closeFile(f);      // Закрываем файл
end;

Тимошенко Дмитрий

Посетитель
04.04.2010, 05:16
5
Все что нужно! Отлично!
Спасибо большое.

Мини-форум консультации # 177659

Dimon4ik

226223

= общий =    04.04.2010, 11:14
Тимошенко Дмитрий:
Спасибо. Все работает, только у меня один маленький вопрос, как сделать так чтобы в edit вывелся не сам символ кодирующийся ASCII кодом, а сам код. Например не 1, а 31. Вот как я использовал код, таким образом выводится только символ..
Код
seek(f,StrToInt(edit1.Text));   // Переходм к заданной позиции
read(f,buf1);
edit2.text:=Char(unit1.buf1);


И еще одно, как в этой строке задать не число конкретное а Edit1.text?
buf2:=$0A;
Тимошенко Дмитрий

226229

= общий =    04.04.2010, 12:33
Используйте функции IntToStr и обратную StrToInt. Т.е. edit2.text:=IntToStr(unit1.buf1); и наоборот buf2:=StrToInt(Edit1.Text);
А вообще вам стоит почитать в хелпе или литературе про преобразования типов.
Igor Yu. Pilyugin

Мастер-Эксперт

ID: 21244

226366

= общий =    06.04.2010, 02:43
Это не ответ на вопрос, переношу в мини-форум.

Здравствуйте, Dimon4ik.
Ссылаясь на товарища Михаила Фленова, могу сказать, что в делфи есть встроенный ассемблер, и среди кода можно писать код на ассемблере. Его следует заключать между ASM .... END.
Ответил: Титов Евгений , 2-й класс
Дата отправки: 04.04.2010, 08:26

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.