Crc32NoTable

#include <Windows.h>

SIZE_T StringLengthW(_In_ LPCWSTR String)
{
    LPCWSTR String2;

    for (String2 = String; *String2; ++String2);

    return (String2 - String);
}

UINT32 Crc32NoTable(PVOID Data, SIZE_T Length)
{
	PUINT8 Pointer = (PUINT8)Data;
	UINT32 Hash = 0xFFFFFFFFU;

    while (Length--) 
    {
        Hash ^= *Pointer++;
        for (int i = 0; i < 8; i++) 
        {
            if (Hash & 1)
                Hash = (Hash >> 1) ^ 0xEDB88320U;
            else
                Hash >>= 1;
        }
    }

    return Hash ^ 0xFFFFFFFFU;
}

INT main(VOID)
{
	WCHAR StringHashExample[] = L"Hash This String";
	UINT32 Hash = 0;

  Hash = Crc32NoTable(StringHashExample, (StringLengthW(StringHashExample) * sizeof(WCHAR)));

	return ERROR_SUCCESS;
}

Last updated