1、如:
 VC中:
 char cmdBuf[50];
   strncpy(cmdBuf+7, sParam1.c_str(), 17); 
 var 
    sbuff : array[0..49] of char;
 
   但subff偏移七位 并且付值?用Delphi如何实现?
 2、 如VC中: (char*)&unDataLen  unDataLen 是uint类型,个人理解是Uint类型按装char偏移 ,那么在Delphi中如何实现呢?  

解决方案 »

  1.   

    1、var  
      subff : array[0..49] of char;@subff[0]是第一个元素地址,@subff[7]是从第一个元素偏移7字节的地址
    在StrPCopy等函数里,可以直接使用这样的地址2、我不懂
      

  2.   

    delphi用Move,copymemoery等都可以
      

  3.   

    1、如:
     VC中:
     char cmdBuf[50];
      strncpy(cmdBuf+7, sParam1.c_str(), 17); 
     var 
      sbuff : array[0..49] of char;
     
      但subff偏移七位 并且付值?用Delphi如何实现?var  
      sbuff : array[0..49] of char;Move(PAnsiChar(srcString)^, (sbuff + 7)^, 17);
    or
    Move(PAnsiChar(srcString)^, sbuff[6], 17); 
    2、 如VC中: (char*)&unDataLen   unDataLen 是uint类型,个人理解是Uint类型按装char偏移 ,那么在Delphi中如何实现呢? (char*)&unDataLen  表示:取unDataLen地址,并将该地址强制转换成char*指针。类似Delphi操作:
    var
      unDataLen: Integer;@unDataLen
    or
    PAnsiChar(@unDataLen)
      

  4.   


    var
      subff : array[0..6] of char = ('1','2','3','a','b','c',#0);
      a: array[0..6] of char = ('u','v','w','x','y','z',#0);procedure TForm1.Button1Click(Sender: TObject);
    begin
      Showmessage(string(subff));
      move(subff[3], subff[0], 3);
      Showmessage(string(subff));
      StrPCopy(@subff[3], StrPas(@a[3]));
      Showmessage(string(subff));
      CopyMemory(@subff[0], @a[0], 3);
      Showmessage(string(subff));
    end;
      

  5.   

    2、 如VC中:
        unit undatalen; 
        (char*)&unDataLen 
        recv( sockTrgClient, (char*)&unDataLen +i, 4-i, 0 );在D中
      recv( sockSDFSClient,PAnsiChar(@unIdleBlocks), 4,0);去报错:
     [错误] UnitSDFSOperate.pas(77): Constant object cannot be passed as var parameter
      

  6.   

    recv( sockSDFSClient,Pointer(@unIdleBlocks)^, 4,0);
    如果带上偏移
    recv( sockSDFSClient,Pointer(integer(@unIdleBlocks) + nPos)^, 4,0);如果unIdleBlocks本身是指针型的变量,如:String,P结构,PChar等,则是
    recv( sockSDFSClient,Pointer(unIdleBlocks)^, 4,0);
      

  7.   

    VC中: if (!SafeRecv(sockSDFSClient, (char*)pRecvBuf, unDataBlockSize))
    {
    bHasError = TRUE;
    break;
    }
    UINT unImgSize = *((UINT*)pRecvBuf);
    红字部分如何用Delphi实现?? pRecvBuf : array of byte;
      

  8.   

    都是些pascal/delphi基础。强制指针转换啊
    UINT unImgSize = *((UINT*)pRecvBuf);var
      unImgSize: Integer;
      pRecvBuf: array [0..xxx] of Byte;
    unImgSize := PInteger(pRecvBuf)^;
    unImgSize := PInteger(@pRecvBuf[0])^;C/C++里面的东西,有些能直接译,有些是pascal的语法,就像无类型参数
    像pascal的写法是这样:
    procedure test(var aaa; const bbb; ccc: Pointer);
    像对应C/C++就是:
    void test(void *aaa; char *bbb; int []ccc);