wchar_t与char转换、wstring与string转换
添加时间:2013-5-17 点击量:
1、wstring string转换
1)win32下wchar_t占2个字节,linux下wchar_t占4个字节。wchar_t的高字节应当存放在char数组的低字节。
2)win下面有函数WideCharToMultiByte() 和 MultiByteToWideChar()
3)linux类似的函数有:mbstowcs() wcstombs()
wcstombs和mbstowcs应用:
#include <locale.h>
setlocale(LC_ALL, );
wcstombs(char to,wchar_t ,size_t _maxCount);
mbstowcs(wchar_t to,char ,size_t _maxCount); //_maxCount,大小必然如果长度的2倍,不然出来的中文也会是乱码
demo:
#include <string>
#include <stdlib.h>
#include <locale.h>
std::string ws2s(const std::wstring& ws)
{
std::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);
std::string result = _Dest;
[]_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
std::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;
[]_Dest;
setlocale(LC_ALL, C);
return result;
}
2、Notice:
应用iostream中的io流输入输出wstring或者wchar时,设置locale后,应用wcin及wcout输入输出。
参考:
http://www.cnblogs.com/MichaelOwen/articles/2128771.html
http://www.ibm.com/developerworks/cn/linux/l-cn-ccppglb/index.html?ca=drs-
文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
1、wstring string转换
1)win32下wchar_t占2个字节,linux下wchar_t占4个字节。wchar_t的高字节应当存放在char数组的低字节。
2)win下面有函数WideCharToMultiByte() 和 MultiByteToWideChar()
3)linux类似的函数有:mbstowcs() wcstombs()
wcstombs和mbstowcs应用:
#include <locale.h>
setlocale(LC_ALL, );
wcstombs(char to,wchar_t ,size_t _maxCount);
mbstowcs(wchar_t to,char ,size_t _maxCount); //_maxCount,大小必然如果长度的2倍,不然出来的中文也会是乱码
demo:
#include <string>
#include <stdlib.h>
#include <locale.h>
std::string ws2s(const std::wstring& ws)
{
std::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);
std::string result = _Dest;
[]_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
std::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;
[]_Dest;
setlocale(LC_ALL, C);
return result;
}
2、Notice:
应用iostream中的io流输入输出wstring或者wchar时,设置locale后,应用wcin及wcout输入输出。
参考:
http://www.cnblogs.com/MichaelOwen/articles/2128771.html
http://www.ibm.com/developerworks/cn/linux/l-cn-ccppglb/index.html?ca=drs-
文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》