以下说明的所有类型转换均在MFC框架下实现。
1、CString 转成 DWORD
需要的头文件:#include<stdlib.h>
CString str = L"123456";
DWORD dw;
dw = _tcstoul(str, NULL, 16);
此时的16,代表了十六进制,当前也可以换算成别的进制。
注意:一般这种转换方法使用在了颜色转换中。为什么这么说呢?
假设我们要给一个控件设置自定义颜色值时,美工部门给出了一个类似于这种写法的颜色值,如:#FF0000。我们就需要将这个16进制转成RGB形式。这个算法不是这章节的重点。如果有需求学习的,留言告诉我,我会更新出来。
2:CString 转成 std::string
CString str = L"123";
CStringA strA = CT2A(str);
std::string sData(strA);
3:CString 转成 std::wstring
CString str = L"mm";
std::wstring wstr = str.GetString();
4:CString 转成 int
CString str = L"12";
int n = _ttoi(str);
5:CString 转成 char*
char* ch_data;
CStringA strDataA;
CString str = L"需要转换的文本";
strDataA = CT2A(str);
ch_data = strDataA.GetBuffer();
/*
中间使用char*的代码
*/
strDataA.ReleaseBuffer();
6:std::string 转成 CString
std::string s = "123";
CString strChange = L"";
strChange = s.c_str();
7:std::string 转成 LPCWSTR
这个功能一般用到了写公共库时,想要让代码能够适应在MFC以及WIN32环境中任意切换时,有些函数的API是LPCWSTR时,无法用MFC框架中的CString表示时,就需要用到这个转换函数了
LPCWSTR CFFmpegDecoder::stringToLPCWSTR(std::string sData)
{
size_t size = sData.length();
wchar_t *buffer = new wchar_t[size + 1];
MultiByteToWideChar(CP_ACP, 0, sData.c_str(), size, buffer, size * sizeof(wchar_t));
buffer[size] = 0;
return buffer;
}
8:std::wstring 转成 CString
std::wstring wstr = "需要转换的文字";
CString str = wstr.c_str();
9:std::wstring 转成 int
std::wstring wstr = "12";
int n = _wtoi(wstr);
10:int 转成 std::string
需要用到的头文件#include <sstream>
int n = 123;
std::stringstream ss;
ss << n;
std::string sResult = ss.str();
11:float 转成 std::string
std::stringstream buf;
buf.precision(1); //覆盖默认精度
buf.setf(std::ios::fixed); //保留小数位
buf << fData;
std::string str;
str = buf.str();
12:const char* 转成 CString
CString CXXXDlg::ConstCharToCString(const char* ch)
{
char *buf = new char[strlen(ch)+1];
memset(buf , 0 , sizeof(ch));
strcpy(buf , ch);
CString strName ;
strName = buf;
delete []buf;
return strName ;
}
13:CString 转成 char[]
BOOL CStringToChar(CString str , char ch[])
{
char* tmpch ;
int wLen = WideCharToMultiByte(CP_ACP , 0 , str , -1 , NULL , 0 , NULL , NULL);
tmpch = new char[wLen + 1 ];
WideCharToMultiByte(CP_ACP , 0 , str ,-1 ,tmpch , wLen , NULL , NULL );
for(int i = 0 ; i < wLen ; ++i)
ch[i] = tmpch[i];
}
14:std::string 转成 std::wstring
std::wstring MyXXXDlg::stringToWstring(const std::string str)
{
std::string curLocale = setlocale(LC_ALL, "chs"); // curLocale = "C";
const char* _Source = str.c_str();
size_t nDstCharSetLen = (str.size() + 1) * 2;
wchar_t *_Dest = new wchar_t[nDstCharSetLen];
memset(_Dest, 0, nDstCharSetLen);
size_t nLen = 0;
mbstowcs_s(&nLen, _Dest, nDstCharSetLen, _Source, nDstCharSetLen);
std::wstring result = _Dest;
delete[]_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
15:std::wstring 转成 std::string
std::string MyXXDlg::wstringToString(const std::wstring ws)
{
std::string curLocale = setlocale(LC_ALL, "chs");// curLocale = "C";
const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * (ws.size() + 1);
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
size_t nSize = 0;
wcstombs_s(&nSize,_Dest,_Dsize,_Source,_Dsize);
std::string result = _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
16:字符串转成十六进制字符串
std::string MyXXXDlg::stringToHexString(std::string sData)
{
const std::string hex = "0123456789ABCDEF";
std::stringstream ss;
for (std::string::size_type i = 0 ; i < sData.size() ; i++)
{
//没有分割符
ss << hex[(unsigned char)sData[i] >> 4] << hex[(unsigned char)sData[i] & 0xf] << "";
}
return ss.str();
}
好了,目前我用到的也就这几个,如果有我还会继续更新,点个赞支持一下吧~