内存地址转换为数字

#if defined(_WIN64)
#define	MAX_ADDR_HEXSIZE	16				// In 64 Bits, 16 hex digits
#else
#define	MAX_ADDR_HEXSIZE	8				// In 32 Bits, 8 hex digits
#endif

#define	MAX_ADDR_TEXTSIZE	(MAX_ADDR_HEXSIZE + 1)

PVOID mGetTextAddress(LPCTSTR pszText, DWORD dwLength)
{
	DWORD_PTR	dwValue;
	DWORD		dwIndex;
	TCHAR		chChar;

	if((pszText == NULL) || (dwLength != MAX_ADDR_HEXSIZE)) return NULL;
	dwValue = dwIndex = 0;
	while(TRUE)
	{
		if(dwIndex >= dwLength) break;
		chChar = pszText[dwIndex++];
		if(chChar >= 'a' && chChar <= 'f') chChar -= ('a' - 10);
		else
		{
			if(chChar >= 'A' && chChar <= 'F') chChar -= ('A' - 10);
			else
			{
				if((chChar >= '0') && (chChar <= '9'))
					chChar -= '0';
				else
					return NULL;
			}
		}
		dwValue = (dwValue << 4) + (DWORD_PTR)chChar;
	}
	return (PVOID)dwValue;
}

你可能感兴趣的:(内存地址转换为数字)