socket发送record类型变量,如何会这样?

socket发送record类型变量,怎么会这样??
//1.结构定义
        TMsgHead=packed   record                                  
            iMsgLen:Longint;
            iMsgID:Longint;
            sMsgSerial:Array[0..11]   of   char;
        end;

        TMsgBody_Bind=packed   record                
            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;

//2.赋值-----------------------------------------------
function   TLT.BindData_Create():TMsg_Bind;
var
    BindData:TMsg_Bind;
begin
    ZeroMemory(@BindData,Sizeof(BindData));
    BindData.MsgBody.iLoginType:=$1;      
    .....赋值操作


//调用,发送-----------------------------------------------
procedure   TForm1.SckLtConnect(Sender:   TObject;   Socket:   TCustomWinSocket);
  var
    BindData:TMsg_Bind;
begin
    BindData:=Lt.BindData_Create;
    sckLt.Socket.SendBuf(BindData,sizeof(BindData));
......................
    result:=BindData;

//-------------------------------------------------
现在的问题是,结构里面的iloginType等类型,赋数值之后,使用socket发送结构,发现数字1是用01   00   00   00   表示的,而不是00   00   00   01表示的,请问怎么会这样,服务器那边要求必须是00   00   00   01,这该怎么办呀??

盼高手指教!

------解决方案--------------------
不懂帮顶一下

数字1是用01 00 00 00 表示的
, 而不是00 00 00 01表示的,这样表示的话它就不是1了。

严重关注
------解决方案--------------------
去掉packed 关键字试试
------解决方案--------------------
很有难度了,在DELPHI中整数就是这样表示的,高位在后面。如果自己手动移位,它表示的数值也就变了,如果你所需要的整数很少,比如在0-9之间,你可以用字符表示,这样就好处理了。
------解决方案--------------------
你可以在接收端也定义同样的RECORD类型 接收时直接RECV到RECORD里面 应该就没问题了
------解决方案--------------------
Intel的CPU中多字节整数是低位在前,高位在后的。
Motorola的CPU中多字节整数是高位在前,低位在后的。
从楼主的描述来看,服务器端的程序是别人已经写好了的。如果真是这样的话,只能自己写转换函数来转换顺序了。

------解决方案--------------------
楼主是C++写好的服务端