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

时间:2021-12-08 17:51:19

<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);