64,662
社区成员
发帖
与我相关
我的任务
分享
// 二分法检索hash值
bool finded = false;
int left = 0;
int right = _itemCount - 1;
int mid = 0;
static DWORD* hashAddr = _indexBuf + _itemCount;
while (left <= right)
{
mid = (left + right) / 2;
const DWORD* p = hashAddr + mid;
if (*p == hash)
{
finded = true;
p -= _itemCount;
if (HIWORD(*p) > _buf.size()) _buf.resize(HIWORD(*p));
SetFilePointer(_file, LOWORD(*p), NULL, FILE_BEGIN);
ReadFile(_file, &_buf[0], HIWORD(*p), &reserve, NULL);
break;
}
if (hash > *p) left = mid + 1;
else right = mid - 1;
}