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


Автор: JS2 4.3.2010, 17:44
В стрим записываю целочисленное значение (4 байта):

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  N, Res: Integer;
  S: TStream;
  W1, W2: Word;
begin
  N := 123456;
  S := TMemoryStream.Create;
  try
    S.Write(N, SizeOf(N));
    S.Position := 0;
    S.Read(Res, SizeOf(N));

    ShowMessage(IntToStr(Res));
    // ...
  finally
    S.Free;
  end;
end;


как получить это значение считывая из стрима по 2 байта.
т.е. 

Read 2 байта
Read 2 байта
=> объединили => получили значение 4-х байтное которое сохраняли.

Автор: Matematik 4.3.2010, 23:13
Код

    S.Position := 0;
    S.Read(W1, SizeOf(W1));
    S.Read(W2, SizeOf(W2));
    Res := w1 or (w2 shl 16);


Можно и без стримов.
Код

procedure TForm1.btn1Click(Sender: TObject);
type
  typ1 = record
    case Integer of
      0: (a: Integer);
      1: (b: array[0..1] of Word);
      2: (c: array[0..3] of Byte);
  end;
var
  i: Integer;
  t: typ1;
  i1,i2: Integer;
begin
  // так
  i := 127001;
  t.a := i;
  // или так
  i1 := i and $FFFF;
  i2 := (i and $FFFF0000) shr 16;
  // объединить
  i := i1 or (i2 shl 16);
  //---
  ShowMessage(Format('%d %d'#13#10'%d %d'#13#10'%d', [t.b[0],t.b[1],i1,i2,i]));
end;


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