2012-04-12 15 views
-1

Mögliche Duplizieren:
Converting C “FOR” loop to DelphiConvert C++ FOR-Schleife zu Delphi

Ich versuche, eine C++ FOR-Schleife zu Delphi zu konvertieren, aber ich habe keine Ahnung, wie es zu tun.

..

dies ist die C++ Funktion:

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; 
} 

Ich habe gerade die Funktionsdeklaration konvertieren:

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

Wie ist die Umsetzung? Perfekt

Dank

Antwort

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

! Danke david – paulohr

+0

Vermeiden Sie einfach '' PAnsiChar''. Verwenden Sie den generischen Typ '' PChar''. –

+0

@ ChristopherRamírez Nein, das ist ein schlechter Rat. In Delphi 2009 und später ist 'Char' 2 Byte breit. In C und C++ unter Windows ist 'char' immer 1 Byte breit. Der Wechsel von "PChar" in der Frage zu "PansiChar" in meiner Antwort wurde aus diesem Grund sehr bewusst gemacht. –