2012-04-12 128 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