DWORD类型与16进制字符串之间的相互转换

时间:2022-09-26 19:11:13

<span style="font-family: Arial, Helvetica, sans-serif;">MFC 中输入32位地址和数据的Edit控件关联的变量为DWORD m_Addr,m_Data,</span>

在控件中输入类似“0x4F0C”的地址或数据时,直接利用UpdateData(TRUE)不能获得DWORD 类型的m_Addr,m_Data

因此只能使用GetDlgItemText(int nID,CString &cstr)来获得相关的CString类型

1、16进制的字符串转换为DWORD类型

</pre><pre name="code" class="cpp"><pre name="code" class="cpp">DWORD CConfigureDlg::HexStringToDword(TCHAR * szBuf)
{
	DWORD dwValue = 0;
	BYTE bValue;
	BYTE k;
	for(k=0;k<10;++k)
	{
		if(*szBuf >= '0' && *szBuf <= '9')
		{
			bValue = *szBuf - '0';
		}
		else if(*szBuf >= 'a' && *szBuf <= 'f')
		{
			bValue = *szBuf - 'a' + 10;
		}
		else if(*szBuf >= 'A' && *szBuf <= 'F')
		{
			bValue = *szBuf - 'A' + 10;
		}
		else if(*szBuf =='x' || *szBuf == 'X')
		{
			dwValue = 0;
			szBuf ++;
			continue;
		}
		else{
			break;
		}
		dwValue <<= 4;
		dwValue |= bValue;
		szBuf ++;
	}
	return dwValue;
}


 

2、DWORD类型转换为16进制字符串

void CConfigureDlg::DwordToHexString(DWORD dwValue,TCHAR *szBuf)
{
	BYTE bValue;
	BYTE k;
	*szBuf = '0';
	*(++szBuf)='x';
	++szBuf;
	for(k=0;k<8;++k)
	{
		bValue = (BYTE)((dwValue & 0xF0000000)>>28);
		if(bValue == 0)
		{
			dwValue <<= 4;
			continue;	
		}
		if(bValue < 10)
		{
			*szBuf = bValue + '0';
		}
		else
		{
			*szBuf = (bValue-10)+'A';
		}
		dwValue <<= 4;
		szBuf ++;
	}
	*szBuf = '\0';
}



因为得到的为CString 类型,需要在CString 和 TCHAR *之间进行转换

1、CString转换为TCHAR *类型

TCHAR *CConfigureDlg::CString2TCHAR(CString &str)
{
	int iLen = str.GetLength();
	TCHAR *szRs = new TCHAR[iLen];
	lstrcpy(szRs,str.GetBuffer(iLen));
	str.ReleaseBuffer();
	return szRs;
}


2、TCHAR *类型转化为CString类型

TCHAR * szBuf = new TCHAR[10];
DwordToHexString(m_ReadData,szBuf);
CString str;
str.Format(_T("%S"),szBuf);