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