Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.01.2008, 14:56
HM47 HM47 вне форума
Прохожий
 
Регистрация: 24.01.2008
Сообщения: 3
Репутация: 10
По умолчанию Работа с HEX-данными

Собственно проблема в следующем.
Как в Delphi реализовать такую функцию:
В открытом файле перейти по смещению 0x0001000 (к примеру),
прочитать 30 байт, взять открыть другой файл и записать эти 30 байт по смещению 0x0002000?

Вообщем интересует чтение и запись данных в hex по смещениям
?

Последний раз редактировалось HM47, 24.01.2008 в 14:59.
Ответить с цитированием
  #2  
Старый 24.01.2008, 16:16
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Юзай TFileStrem. HEX значения записываются в Делфи как $FFFFFF (т.е. начинаются со знака $). Сменить позицию в файле TFileStream.Position := some_hex_value.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #3  
Старый 25.01.2008, 22:13
HM47 HM47 вне форума
Прохожий
 
Регистрация: 24.01.2008
Сообщения: 3
Репутация: 10
По умолчанию

Теперь проблема с чтением данных
Если использовать это:

Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var
a:TFileStream;
s:byte;
begin
OpenDialog1.Execute;
a:=TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite);
a.Seek($0,soFromBeginning);
a.Read(s, sizeof(s));
IF s=$05 then
begin
s:=$00;
a.Seek($0,soFromBeginning);
a.write(s,sizeof(s));
end;
a.free;
end;
то работает с одним байтом. А как сделать чтоб несколько сразу заменить.
Пробывал так:
Цитата:
...
a.Read(s, sizeof(3));
IF s=$050201 then
begin
s:=$000000;
...
не работает
Ответить с цитированием
  #4  
Старый 25.01.2008, 22:15
HM47 HM47 вне форума
Прохожий
 
Регистрация: 24.01.2008
Сообщения: 3
Репутация: 10
По умолчанию

Теперь проблема с чтением данных
Если использовать это:

Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var
a:TFileStream;
s:byte;
begin
OpenDialog1.Execute;
a:=TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite);
a.Seek($0,soFromBeginning);
a.Read(s, sizeof(s));
IF s=$05 then
begin
s:=$00;
a.Seek($0,soFromBeginning);
a.write(s,sizeof(s));
end;
a.free;
end;
то работает с одним байтом. А как сделать чтоб несколько сразу заменить.
Пробывал так:
Цитата:
...
a.Read(s, sizeof(3));
IF s=$050201 then
begin
s:=$000000;
...
не работает
Ответить с цитированием
  #5  
Старый 06.03.2008, 19:07
Navi1982 Navi1982 вне форума
Прохожий
 
Регистрация: 28.01.2008
Сообщения: 12
Репутация: 10
Хорошо

Цитата:
А как сделать чтоб несколько сразу заменить.

Попробуй использовать массив... Например:
Код:
Var
...
s:array [1..10] of byte; //вообщето скока надо стока и ставь
...
а дальше пишеш:
Код:
a.write(s,sizeof(s));

На счет чтения, тоже можешь использовать массив...
Код:
a.Read(s, sizeof(s));
если значения 4-байтовые и их несколько подряд то массив должен быть соответственным например:
Код:
s:array [1..10] of Integer;
А если значение одно, то массив использовать необязательно.
Код:
s:Integer;

Одно могу сказать. Обрабатывая последовательность данных используй массив. Если, требуется обрабатывать кусочки данных, то просто переменную соответствующего размера (даже структуру).
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter