2012-04-12 126 views
-1

可能重複:
Converting C 「FOR」 loop to Delphi轉換C++ for循環德爾福

我想一個C++轉換FOR循環德爾福,但我不知道該怎麼做。 ..

這是C++函數:

bool bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) 
{ 
    for(;*szMask;++szMask,++pData,++bMask) 
     if(*szMask=='x' && *pData!=*bMask) return 0; 
    return (*szMask) == NULL; 
} 

我剛剛轉換函數聲明:

function bCOmpare(pData: PBYTE; bMask: PBYTE; szMask: PCHAR):boolean; 
begin 
//... 
end; 

是怎樣的轉換?

感謝

回答

7
function bCOmpare(pData: PByte; bMask: PByte; szMask: PAnsiChar): Boolean; 
begin 
    while szMask^<>#0 do 
    begin 
    if ((szMask^='x') and (pData^<>bMask^)) then 
    begin 
     Result := False; 
     exit; 
    end; 
    inc(szMask); 
    inc(pData); 
    inc(bMask); 
    end; 
    Result := True;//the test in the C code is pointless 
end; 
+0

完美!謝謝大衛 – paulohr 2012-04-12 13:45:25

+0

只要避免使用「PAnsiChar」。使用其通用類型「PChar」。 – 2012-04-12 18:23:46

+0

@ChristopherRamírez不,這是可憐的建議。在Delphi 2009和更高版本中,'Char'的寬度是2個字節。在Windows的C和C++中,'char'總是1個字節寬。出於這個原因,我在答案中從問題中的'PChar'改爲'PAnsiChar'是非常有意的。 – 2012-04-12 18:26:35