그건, 엿장수 맘이.. 아니 컴파일러마다 다릅니다.
따라서 이기종간 통신을 위해선 packed record를 쓰지요.
첫눈 님이 쓰신 글 :
: 말씀듣고 보니 레코드 크기를 맞추기 위해 '0000'을 삽입한게 맞는 것 같습니다.
: 문자열의 길이를 조절해 보면 삽입되는 '0'의 갯수가 달라지거든요.
: 그런데 한 가지 더 궁금한 것은
: 바이트수를 맞추기 위해서라면 '0000'이 맨 뒤로 가거나 맨 앞으로 가거나 또는 각 칼람 뒤에 붙어야 할 것 같은데요.
: 여기서 보면 문자열이 끝나고 수치형데이터가 시작되기 전에 삽입이 되고 있습니다.
: 이렇게 여분의 공간을 삽입하는 위치에도 어떤 규칙이 있는가가 궁금합니다.
:
:
: kylix 님이 쓰신 글 :
: : Var1이 String[20]으로 되어 있으니까 문자열 '한글'이 차지하는 4바이트 빼고는 나머지 16바이트는 null(=0x00)으로 채워져 있는 거죠.
: :
: : 첫눈 님이 쓰신 글 :
: : : 레코드 선언은 아래와 같습니다.
: : :
: : : 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' 이 값은 레코드 구조에 따라 있을때도 있고 없을때도 있고 도데체 뭔지 모르겠습니다.
: : :
: : : 이 값이 어떤 값인지 알려주시면 감사하겠습니다.