定义了一个结构TMsg_Bind,里面仅仅包含两个结构TMsg_Head,TMsg_Body,结果发现使用
sizeof计算Tmsg_Bind类型的变量BindData的大小时候,不是他两个结构大小的和,请问为什么??var
  BindData:TMsg_Bind;
begin
  ShowMessage(IntToStr(sizeof(BindData.MsgHead)));  //20
  ShowMessage(IntToStr(sizeof(BindData.MsgBody)));  //41
  ShowMessage(IntToStr(sizeof(BindData)));  //64 ???各结构定义如下:    TMsgHead = record           //所有消息体的消息头  20字节
      iMsgLen:Longint;
      iMsgID:Longint;
      sMsgSerial:Array[0..11] of char;
    end;    TMsgBody_Bind = record        //bind消息体      41字节
      iLoginType:Byte;
      sLoginUser:Array[0..15] of char;
      sLoginPwd:Array[0..15] of char;
      sReserve:Array[0..7] of char;
    end;    TMsg_Bind=record
      MsgHead:TMsgHead;
      MsgBody:TMsgBody_Bind;
    end;

解决方案 »

  1.   

    delphi编译器有字段对齐的功能,默认是八位对齐
      

  2.   


      TMsgHead = packed record           //所有消息体的消息头  20字节
          iMsgLen:Longint;
          iMsgID:Longint;
          sMsgSerial:Array[0..11] of char;
        end;    TMsgBody_Bind = packed record        //bind消息体      41字节
          iLoginType:Byte;
          sLoginUser:Array[0..15] of char;
          sLoginPwd:Array[0..15] of char;
          sReserve:Array[0..7] of char;
        end;    TMsg_Bind = packed record
          MsgHead:TMsgHead;
          MsgBody:TMsgBody_Bind;
        end;这样定义的话就是两个之和了