2010-10-29 175 views
2
有hardtime

IM在memset和memcpy的轉換爲德爾福。有人可以爲我提供這方面的信息,或者有關這方面工作的建議嗎?幫助我的C++代碼

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

-1:這是不是*的幫助,我*,這是一個*做它換我*。告訴我們你已經嘗試了什麼,以及哪些特定部分不適合你。 – 2010-10-29 08:36:18

+1

請提供您目前爲止的示例代碼,然後告訴我們您遇到了什麼問題。當Space_C0wb0y說「這是一個*爲我做*」時,他意味着堆棧溢出不是爲了這個目的。這是爲了幫助,而不是無償工作。 – 2010-10-29 08:43:31

+0

@Merlyn Morgan-Graham,我在這裏找到關於memset和memcpy的http://www.daniweb.com/forums/thread238270.html。它不工作。他們有不同的參數(memcpy)。 – XBasic3000 2010-10-29 08:48:40

回答

4
  • memset填充多個具有指定值的字節。在德爾福,我們使用FillChar。但是如果我們想要填充的值爲零,那麼也可以使用ZeroMemory函數。

  • memcpy拷貝字節從一個位置到另一個位置的塊(在RAM中)。在Delphi中,我們使用Move。您還可以使用CopyMemory(或相同功能MoveMemory)如果你想使用指針,而不是德爾福變量工作。

即,

Move(a, b, n) 

複製n個字節從名爲a到b的位置,其中a和b是變量的數據。這相當於

CopyMemory(@b, @a, n) 

其中@a和@b分別是指向源和目標的指針。 (我個人認爲,後者的語法更容易解釋,在某種意義上,它需要兩個地址,畢竟,這是我們如何與內存的工作。)

因此,如果pq是指針,你可以在Delphi堆做

CopyMemory(q, p, n) 

Move(p^, q^, n). 

你可能也想知道如何分配,重新分配和釋放內存。您分別使用GetMemReallocMemFreeMem程序。

與指針

工作

Deplhi可以是相當嚴格的,當涉及到指針算術。但在32位系統上(例如運行Delphi應用程序的系統),指針實際上只是一個32位無符號整數,即一個cardinal。所以你可以像紅衣主教一樣使用指針,如果你只是告訴編譯器這樣做。

因此,如果編譯器不允許

myPtr + 200 

那麼你可以做

cardinal(myPtr) + 200. 
+0

Thanx的答覆,但我怎麼能把「szRawBuf +(QSIZE * nBufIter)」這個參數?它說第二個參數是一個指針。 'szRawBuf +(QSIZE * nBufIter)'怎麼可能? – XBasic3000 2010-10-29 08:59:41

+0

好吧,我明白了。移動(..)是不可能的,但CopyMemory(..)不會。 thnx – XBasic3000 2010-10-29 09:11:51

+0

@ XBasic3000:如果'CopyMemory(a,b,n)'起作用,那麼'Move(b ^,a ^,n)'也會起作用。 (但是,也許你需要像「Move(PSomeType(b)^,PSomeType(a)^,n')一樣投射。 – 2010-10-29 09:16:51

1

試驗後的代碼的日子裏,我finaly得到了它的工作!

@Merlyn摩根 - 格雷厄姆問我張貼的答案,那麼這個問題得到了關閉!他們說它不是真的?因爲我自己回答了嗎?

+0

不,看起來不錯,很高興你的工作:) – 2010-10-31 02:27:16

+0

+1和投票重新打開;我同意這是一個關於從C/C++轉換到Delphi的真正問題。 – 2010-10-31 07:53:18

+0

@Jeroen Pluimers,thanx。給你更多的權力。 – XBasic3000 2010-10-31 11:22:28