帮我翻译C ++代码到Delphi

时间:2010-10-29 08:32:06

标签: c++ delphi transactions equivalent

我在memset和memcpy中遇到了困难。谁可以为我翻译这个,或建议这个东西如何工作?

do{
  memset(szSpeechBuf, 0x0, sizeof(char)*QSIZE);
  if((nBufIter+1)*QSIZE > nRawBufLen)
    {
      diff = nRawBufLen - (nBufIter)*QSIZE;

      if(diff < 0)
      {
        printf("DetectSpeech() error : timeout!!!");
        exit(1);
      }
      memcpy(szSpeechBuf, szRawBuf+(QSIZE*nBufIter), diff);
    }
  else
    memcpy(szSpeechBuf, szRawBuf+(QSIZE*nBufIter), sizeof(char)*QSIZE);
} while(1);

// where szSpeechBuf: PAnsiChar; nBufIter: Integer; Const QSIZE = 3200

2 个答案:

答案 0 :(得分:4)

  • memset使用指定的值填充多个字节。在Delphi中,我们使用FillChar。但是,如果我们想要填充的值为零,您还可以使用ZeroMemory函数。

  • memcpy将一个字节块从一个位置复制到另一个位置(在RAM中)。在Delphi中,我们使用Move。如果您想使用指针而不是Delphi变量,也可以使用CopyMemory(或相同的函数MoveMemory)。

即,

Move(a, b, n)

将名为a的数据中的n个字节复制到b的位置,其中a和b是变量。这相当于

CopyMemory(@b, @a, n)

其中@a和@b分别是指向源和目标的指针。 (就我个人而言,我认为后一种语法在某种意义上更容易解释。它需要两个地址,毕竟,这就是我们处理内存的方式。)

因此,如果pq是指针,则可以执行

CopyMemory(q, p, n)

Move(p^, q^, n).

您可能还想知道如何在Delphi中分配,重新分配和释放堆上的内存。您分别使用GetMemReallocMemFreeMem程序。

使用指针

Deplhi在指针算术方面可能相当严格。但是在32位系统(例如运行Delphi应用程序的系统)上,指针实际上只是一个32位无符号整数,即cardinal。因此,如果您只是告诉编译器这样做,您可以使用与基数类似的指针。

因此,如果编译器不允许

myPtr + 200

然后你可以做

cardinal(myPtr) + 200.

答案 1 :(得分:1)

经过一天的代码试验,我最终得到了它的作用!

@Merlyn Morgan-Graham让我发布答案,然后这个问题关闭了!他们说不是真的吗?因为我自己回答了它?