wstring 这个东西和string有什么区别吗??
wstring和string 到底有什么区别啊??搞得头大的很!!!
wstring ws = L“appendix A";
这里面的L“appendix A";的L是什么意思?输出时候为什么用wcout不能用cout?
[解决办法]
wstring的字符为wchar_t 2字节(或4字节,linux)
string的字符为char 1字节
[解决办法]
+1
[解决办法]
wstring表示的是宽字节,搞unicode的时候通常用这个。加个L表示这是个unicode串,既然是unicode,当然要用对应的wcout输出了.....
[解决办法]
宽字串,unicode码,单纯的"appendix A"是ascii码的字串,而前面加L就是将其简单转换成unicode码的字串。
当然如果你在编辑文档中写"appendix哈哈"这样含有中文的字串,一般会根据你的编写环境识别成GBK码,再在前面加L就只能转换其中的ascii码字符,而不能转中文字符。
目前普遍使用unicode码的宽字串进行显示。
ascii码,unicode码,gbk码请自行google..........
[解决办法]
wstring表示宽字节,使程序具有更好的移植性
[解决办法]
//将wstring转换为string的函数
string ws2s(wstring& ws)
{
string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * ws.size() + 1;
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,_Source,_Dsize);
string result = _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
将string 转换为wstring
wstring s2ws( const std::string& s )
{
setlocale(LC_ALL, "chs");
const char* _Source = s.c_str();
size_t _Dsize = s.size() + 1;
wchar_t *_Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
mbstowcs(_Dest,_Source,_Dsize);
std::wstring result = _Dest;
delete []_Dest;
setlocale(LC_ALL, "C");
return result;
}
char *到string
string CharToString(char*arr,int count)
{
string result(arr,4);
return result;
}
string到char *
一个一个字符的赋值
char *p = new char[sring的长度+1];
p[string的长度]='\0';
但是要注意最后赋值'\0'!!!
char * StringToChar(string &str)
{
int len=str.length();
char * p= new char[len+1];
for (int i=0;i<len;i++)
{
p[i]=str[i];
}
p[len]='\0';
}
CString到string
只需一个一个赋值即可!!
string CStringToString(CString cstr)
{
string result(cstr.GetLength(),'e');
for (int i=0;i<cstr.GetLength();i++)
{
result[i]=(char)cstr[i];
}
return result;
}
string到CString
CString StringToCString(string str)
{
CString result;
for (int i=0;i<(int)str.length();i++)
{
result+=str[i];
}
return result;
}
[解决办法]
双字节和单字节