小弟弟我不懂Delphi的东西,哪位高手帮我翻译成C语言,一定加分! type
    PBArray = ^TBArray;
    TBArray = array[0..pred(High(Integer))] of Byte;
  var
    SizeAtEnd : Integer;
    LeftOver  : Integer;
  begin   if SizeAtEnd >= Size then begin
        {can move data to output queue in one block}        Move(Buf^, OBuffer^[OBufHead], Size);
        if SizeAtEnd = Size then
          OBufHead := 0
        else
          Inc(OBufHead, Size);
      end else begin        { need to use two moves }
        Move(Buf^, OBuffer^[OBufHead], SizeAtEnd);
        LeftOver := Size - SizeAtEnd;
        Move(PBArray(Buf)^[SizeAtEnd], OBuffer^, LeftOver);
        OBufHead := LeftOver;
      end;end

解决方案 »

  1.   

    这三句如何改:    PBArray = ^TBArray;
        TBArray = array[0..pred(High(Integer))] of Byte;
        Move(Buf^, OBuffer^[OBufHead], SizeAtEnd);
        Move(PBArray(Buf)^[SizeAtEnd], OBuffer^, LeftOver);
      

  2.   

    c语言里没有move函数吧,你的代码我还有些胡涂
      

  3.   

    由于Delphi的一些特性,你这个代码有些地方不好直接翻译,所以我给出的代码可能会有错误。
    直译的代码:
    typedef unsigned short[7FFFFFFF]  TBArray ;
    typedef TBArray* PBArray
    int SizeAtEnd,leftOver;if(SizeAtEnd>=Size)
    {
    //can move data to output queue in one block
    memcpy(Buf,&(*OBuffer[OBufHead]),Size);
    if(SizeAtEnd==Size)
     OBufHead=0;
    else
     OBufHead+=Size;
    }
    else
    {
    //need to use two moves
    memcpy(Buf,&(*OBuffer[OBufHead]),SizeAtEnd);
    LeftOver=Size-SizeAtEnd;
    memcpy(&(PBArray)Buf[SizeAtEnd],OBuffer,LeftOver);
    OBufHead=LeftOver;
    }