Я хотел бы написать алгоритм, который сравнивает один блок памяти с другим и дает объективное значение, чтобы определить качество соответствия. Я исследовал memcmp
, и все, что действительно полезно, - это определить, являются ли два блока памяти идентичными или нет. Я написал рекурсивную функцию для достижения этой цели, но она работает не совсем правильно.
DWORD CMemory::Compare( LPBYTE pDst, LPBYTE pSrc, DWORD len )
{
DWORD dwDiff;
if ( len == 0 )
{
dwDiff = 0;
}
else
{
dwDiff = (*pSrc - *pDst) * len; // * len is attempt to weight difference by MSB
dwDiff += this->Compare( pSrc + 1, pDst + 1, len - 1 );
}
return dwDiff;
}
Идея состоит в том, что чем ближе совпадают два пространства памяти, тем меньше будет возвращаемое значение. Например, скажем, есть три блока памяти, содержащие Hello World 0 !
, Hello World 1 !
и Hello World 2 !
, соответственно, и я хотел бы выяснить, какой блок памяти является «лучшим соответствием» с кандидатом hello world 1 !
. Идея состоит в том, чтобы я запускал функцию Compare
три раза, сравнивая кандидата с каждым блоком памяти по очереди, и Compare
должен возвращать самое низкое значение для блока памяти, содержащего Hello World 1 !
. Однако в действительности он возвращает самое низкое значение для последнего блока памяти, содержащего Hellow World 2 !
.
У кого-нибудь есть идеи, как мне улучшить эту функцию? Спасибо.