var
iSourceNode:Longword;
curSequenceNumber:Array[0..4] of Byte;copymemory(@curSequenceNumber,@iSourceNode,sizeof(iSourceNode));
如果iSourceNode=1的话,复制内存,那么缓冲区curSequenceNumber中得到的是
01 00 00 00,而不是我想要的00 00 00 01,请问为什么??难道我每个数字写入缓冲区的时候,必须要手工交换高低字节吗??

解决方案 »

  1.   

    01 00 00 00
    相当于curSequenceNumber0]=1;
    本来就是这样放的呀
      

  2.   

    你可能没有看明白我的意思:假如一个longword变量,它在内存中占4个字节,请问,是怎么排列的?不会是01 00 00 00吧??别人用vc写入的数据,就是00 00 00 01,而我用delphi写入的却是01 00 00 00,这样通过socket发送缓冲区出去,完全就不是那么回事了,而象这样的整形数序列话的变量还不止一个,不会每个都要我手工交换高低位吧??
      

  3.   

    VC怎么排的不敢肯定,我想应该是与DELPH是一样的。
    不然写的动态连接库岂不是乱套了,还哪谈得上通用性呀。我想楼主担心的问题应该是多余的。只要不自己定义排列顺序就行了。
      

  4.   

    iSourceNode=1的话,复制内存 相当于PLongword(@curSequenceNumber[0])=iSourceNode;
    C语言里也用类似的机制,应该是不会出错的。
    不要自己去指定哪个字节写什么值
      

  5.   

    iSourceNode=1的话,复制内存 相当于PLongword(@curSequenceNumber[0])^=iSourceNode;
    C语言里也用类似的机制,应该是不会出错的。
    不要自己去指定哪个字节写什么值
      

  6.   

    那我现在要把数值1写入到4字节的缓冲区中,得到00 00 00 01,怎么个搞法??var
    iSourceNode:Longword;
    curSequenceNumber:Array[0..4] of Byte;iSourceNode:=1;....................
    接下来怎么整??   才能让curSequenceNumber中的是00 00 00 01,而不是01 00 00 00呀???
      

  7.   

    var
    iSourceNode:Longword;
    curSequenceNumber:Array[0..4] of Byte;
    begin
    iSourceNode:=1;
    PLongword(@curSequenceNumber[0])^:= iSourceNode shl 32  ;
    ...
      

  8.   

    应该是这样:PLongword(@curSequenceNumber[0])^:= iSourceNode shl 24;
      

  9.   

    非常感谢madyak(无天) ( ) 的热心帮助,虽然没有帮我解决问题,但我真的很感激!!转Delphi3个月了,总体上感觉delphi的程序员大多数很冷漠。 在delphi群里问问题无人问津,在csdn的基础类里问问题,也是人少的可怜。 为了发泄我心中的不满,我还是要忍不住骂一句,去他妈的csdn的delphi的基础类!! 俩斑竹早鸡巴换了吧!!没办法自己写了个函数,不能再等了....
    procedure TLT.Z_SerialLongWord(iValue:LongWord;SerialBuf:Pointer);  //将delphi的longword按右对齐序列化到缓冲区内  $1=00 00 00 01,而不是01 00 00 00(delphi默认的)
    var
      desBuf:Array[0..3] of byte;
      tmpBuf:Array[0..3] of byte;
    begin
      zeromemory(@desBuf,sizeof(tmpBuf));
      zeromemory(@tmpBuf,sizeof(tmpBuf));  copymemory(@desBuf,@iValue,sizeof(iValue));
      tmpBuf[0]:=desBuf[3];
      tmpBuf[1]:=desBuf[2];
      tmpBuf[2]:=desBuf[1];
      tmpBuf[3]:=desBuf[0];  copymemory(@desBuf,@tmpBuf,sizeof(tmpBuf));
      copymemory(SerialBuf,@desBuf,sizeof(desBuf));    
    end;  //3037142018=$b5071c02  存入缓冲区内: b5071c02  而不是 02 1c 07 b5  
      {  //调用示例:
      var
        iSourceNode:Longword;
        tmpBuf:Array[0..3] of Byte;
      begin
        iSourceNode:=$b5071c02;
        Lt.Z_SerialLongWord(iSourceNode,@tmpBuf);
      end;
      }