在win32编程的时候, 各种字符串相关的宏往往搞的头昏眼花, 为了方便今后参考, 随笔记录一下。
持续补充中...
类型转换
string->LPCWSTR
LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。
LPCWSTR StringHelper::ToLPCWSTR(const string& str)
{
size_t origsize = str.length() + 1;
size_t convertedChars = 0;
// malloc 申请能存放足够长str字符的wchar_t类型大小的内存空间
wchar_t *wcstring = (wchar_t *)malloc(sizeof(wchar_t)*(str.length()-1));
mbstowcs_s(&convertedChars, wcstring, origsize, str.c_str(), _TRUNCATE);
std::wstring wstrResult(wcstring);
free(wcstring);
return wstrResult.c_str();
}
int->string
string StringHelper::ConvertFromInt(const int n)
{
char buf[50];
sprintf_s(buf,50,"%d",n);
return buf;
}
int->CString
CString CStringUtil::FromInt(const int i)
{
CString str;
str.Format(_T("%d"), i);
return str;
}
string->int
可以使用C++提供的atoi函数(ASCII to integer 的缩写)
string str;
int i = atoi(str.c_str());
可以直接用string类型的c_str()方法转换,如:
string str;
str.c_str();
CString->string
可以使用CString类型的getBuffer(0)方法进行转换,如:
CString cstr;
cstr.getBuffer(0);
// 如何后续还要对cstr进行赋值等处理,并会动态改变其长度,则调用releaseBuffer方法
cstr.releaseBuffer();
const char*->string
string 是有完善接口的容器。
const char* 是c风格的字符串。
可以使用string的构造函数直接转换。
string str(const char* c);
const char*->CString
CString CStringUtil::FromChar(const char* c)
{
CString str;
str.Format(_T("%s"), c);
return str;
}