Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Работа с байтами в Delphi

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Работа с байтами в Delphi
Имя
Сообщение << Старые топики   Новые топики >>
Работа с байтами в Delphi - 2008-01-26 18:37:55.270000   
HM47

Сообщений: 3
Оценки: 0
Присоединился: 2008-01-26 17:59:01.090000
Как в Delphi через TFileStream реализовать чтение/запись нескольких байтов по указанному оффсету.
К примеру:
По адресу 0x10 в файле прочитать/записать 20 байт 
Post #: 1
RE: Работа с байтами в Delphi - 2008-01-26 20:55:34.076666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

Read(var Buffer; Count: Longint): Longint — читает Count байт из потока в буфер Buffer,
продвигает текущую позицию на Count байт вперед и возвращает число прочитанных байт.
Если значение функции меньше значения Count, то в результате чтения был достигнут конец
потока.
ReadBuffer(var Buffer; Count: Longint) — читает из потока Count байт в буфер Buffer и
продвигает текущую позицию на Count байт вперед. Если выполняется попытка чтения за
концом потока, то генерируется ошибка.
Seek(Offset: Longint; Origin: Word): Longint — продвигает текущую позицию в потоке на
Offset байт относительно позиции, заданной параметром Origin. Параметр Origin может
иметь одно из следующих значений: 0 — смещение задается относительно начала потока; 1
— смещение задается относительно текущей позиции в потоке; 2 — смещение задается
относительно конца потока.
Write(const Buffer; Count: Longint): Longint — записывает в поток Count байт из буфера
Buffer, продвигает текущую позицию на Count байт вперед и возвращает реально записанное
количество байт. Если значение функции отличается от значения Count, то при записи была
ошибка.
WriteBuffer(const Buffer; Count: Longint) — записывает в поток Count байт из буфера Buffer
и продвигает текущую позицию на Count байт вперед. Если по какой-либо причине
невозможно записать все байты буфера, то генерируется ошибка.
Post #: 2
RE: Работа с байтами в Delphi - 2008-01-28 12:15:39.470000   
HM47

Сообщений: 3
Оценки: 0
Присоединился: 2008-01-26 17:59:01.090000
Вот использую этот код:

procedure TForm1.Button1Click(Sender: TObject);
var
a:TFileStream;
s:integer;
begin
OpenDialog1.Execute;
a:=TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite);
a.Seek($0,soFromBeginning);
a.Read(s, sizeof(s));
IF s=$05020302 then
   begin
    s:=$00000008;
    a.Seek($0,soFromBeginning);
    a.write(s,sizeof(s));
  end;
  a.free;
end;

Проблема в том что не могу читать и записывать больше 4-х байт.
Как мне сделать чтоб можно было читать и записывать 30 байт
Post #: 3
RE: Работа с байтами в Delphi - 2008-01-28 20:33:46.580000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

a.Read(s, sizeof(s));

s объявлен как Integer, а это и есть 4 байта. Используй массив, например, а лучше делай типобезопасное чтение.
Post #: 4
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Работа с байтами в Delphi







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.