레코드의 크기를 8의 배수로 만들기 위해 끼워넣는 값입니다.
: Type
: Tmyrecord = record
: Var1: string[20]; => 1 + 20
: Var2: string[20]; => 1 + 20
: Var3: Integer; => 4
: end;
총 46 Byte인데 8의 배수가 안되므로 2만큼 null(0x00)을 넣어 48 Byte로 만든 것이죠.
이걸 방지하려면
TMyRecord = packed record
end;
이렇게 선언해서 쓰면 됩니다.
첫눈 님이 쓰신 글 :
: 레코드 선언은 아래와 같습니다.
:
: Type
: Tmyrecord = record
: Var1: string[20];
: Var2: string[20];
: Var3: Integer;
: end;
:
:
: 이렇게 선언하고 다음과 같이 값을 넣었습니다.
:
: Procedure
: Var
: REC : Tmyrecord;
: Buffer : TIdBytes;
: Begin
: REC.Var1 := '한글';
: REC.Var2 := '잘보여?';
: REC.Var3 := MaxInt;
: Buffer := RawToBytes(REC, RECSizeInt);
: End;
:
:
: 이렇게 값을 넣고 Byte형으로 변환을 하면 다음은 구조를 가집니다.
: 0x04C7D1B1DB0000000000000000000000000000000007C0DFBAB8BFA93F000000000000000000000000000000FFFFFF7F
:
: 이 데이터 구조를 살펴 보면
:
: 0x : 데이터가 Hex값임
: 04 : REC.Var1가 4Byte임
: C7D1B1DB00000000000000000000000000000000 : '한글'
: 07 : REC.Var1가 7Byte임
: C0DFBAB8BFA93F00000000000000000000000000 : '잘보여?'
: 0000 : 이 값이 무슨 값인지 모르겠습니다.
: FFFFFF7F : MaxInt
:
: 특히 '0000' 이 값은 레코드 구조에 따라 있을때도 있고 없을때도 있고 도데체 뭔지 모르겠습니다.
:
: 이 값이 어떤 값인지 알려주시면 감사하겠습니다.
|