Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > чтение из буфера


Автор: JS2 4.2.2010, 11:04
Доброго времени суток. Не могу разобраться как проити по буферу, который формируется из стрима и на каждом офсете считать по 4 байта. Т.е. условно содержимое:

1 2 3 4 5 6 7 8 9

в цикле выводим:

1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9

Вот начало:

Код

procedure TForm8.Button2Click(Sender: TObject);
var
  S: TStream;
  Buf: PChar;
  I: Integer;
begin
  S := TFileStream.Create('Test', fmOpenRead or fmShareDenyNone);
  try
    GetMem(Buf, S.Size);
    try
      S.Read(Buf^, S.Size);
      for I := 0 to S.Size - 3 do
      begin
        //
      end;
    finally
      FreeMem(Buf);
    end;
  finally
    S.Free;
  end;
end;


Автор: Mikel 4.2.2010, 11:07
Что-н типа этого

Код

PDWord=LongWord^;
...
D:LongWord;
..

D:=PDWord(LongWord(@Buf)+i)^;


Добавлено через 2 минуты и 12 секунд
Да, и S.Size - 4

Автор: JS2 4.2.2010, 11:24
Цитата(Mikel @  4.2.2010,  11:07 Найти цитируемый пост)
Что-н типа этогокод Pascal/Delphi1:2:3:4:5:6:PDWord=LongWord^;...D:LongWord;..D:=PDWord(LongWord(@Buf)+i)^;highlightSyntax('delphi_A2NTQx','delphi');highlightSyntax('delphi_A2NTQx','delphi');Добавлено через 2 минуты и 12 секундДа, и S.Size - 4


блин, что то не то:

выводится так:

7FF40010
907FF400
50907FF4
C750907F

а надо вроде как так:

7FF40010
F4001090
00109050
109050C7

Или я что-то не понимаю?

Автор: Mikel 4.2.2010, 12:04
Все верно, просто поменяй байты местами. Информация к размышлению http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)