请把下面的代码翻成pascal的。
 可以马上给分!!! void IE_Imp_PalmDoc::_uncompress( buffer *m_buf )
  {
          buffer *m_new_buf = new buffer;
          UT_uint16 i, j;
          Byte c;
  
          // set all of these to 0 initially
          _zero_fill (m_new_buf->buf, BUFFER_SIZE);
  
         for (i = j = 0; i < m_buf->position && j < BUFFER_SIZE; )
         {
                  c = m_buf->buf[ i++ ];
  
                  if ( c >= 1 && c <= 8 )
                          while ( c-- && j < BUFFER_SIZE-1)
                                  m_new_buf->buf[ j++ ] = m_buf->buf[ i++ ];
  
                  else if ( c <= 0x7F )
                          m_new_buf->buf[ j++ ] = c;
  
                  else if ( c >= 0xC0 && j < BUFFER_SIZE-2)
                  {
                          m_new_buf->buf[ j++ ] = ' ';
                          m_new_buf->buf[ j++ ] = c ^ 0x80;
                  }
                  else
                    {
                      int di, n;
                      unsigned int temp_c = c;
                      // c--> temp_c //tomy 2001.11.13 
                      temp_c = (temp_c << 8) ;
                      temp_c = temp_c + m_buf->buf[ i++ ];
                      di = (temp_c & 0x3FFF) >> COUNT_BITS;
                      for (n = (temp_c & ((1 << COUNT_BITS) - 1)) + 3; n-- && j < BUFFER_SIZE
                             ; ++j )
                        m_new_buf->buf[ j ] = m_new_buf->buf[ j - di ];
                      temp_c = 0;
                    }
          }
          UT_ASSERT(j <= BUFFER_SIZE);
  
          memcpy( (void *)m_buf->buf, (void *)m_new_buf->buf, (size_t) j );
  
          m_buf->position = j;
          delete( m_new_buf );
  }

解决方案 »

  1.   

    改写时,你要注意,delphi的指针是一个强类型的语言,你一定要清楚你所使用、传递的(如buffer *m_buf) 是指定哪个类型的,你可以用Pointer类型,不过最好不要用,它不想vc的*void的指针,本人一直没有明白pointer的用法。第二,你一定要定义一些统一类型,例如
    type
      pBuffer : ^byte;
    实参数与参数一定要相同的类型,例如
    procedure Test;
    var
       i  : Integer;
       pt : ^byte;
    begin
        i  := 10000;
        Test1(pt);
    end;procedure Test1(pt : ^byte);
    var
       j : Integer;
    begin
        inc(pt,16);
        j := pt^;
    end;
    这样的话,程序一定有错,系统认为两个pt不是同一类型,虽然你定义的是一样的,一定要这样
    Type
        ptt : ^byte;
    procedure Test;
    var
      i  : Integer;
      pt : ptt;
    begin
      i := 10000;
      Test1(pt);
    end;procedure Test1(pt:ptt);
    var
      j ; Integer;
    begin
      Inc(pt,2);
      j := pt^;
    end;
    指针的移位一定要用Inc,dec。
    有这些,相信你更改成pascal应该没用很大的问题。
    提供一个网址,供你参考
    http://www.csdn.net/Dev/Delphi/
    商榷
      

  2.   

    这东西麻烦,还是你自己搞了
    0x3fff的Delphi用$3FFF表示
    就是0x换$Delphi是没有memcpy的
    可以是Move或CopyMemory
    类型匹配也可以:=代替,有时用StrCopy等了,看具体需要