C++编码转换多字节字符宽字符

来源:互联网 发布:大庆软件开发公司 编辑:程序博客网 时间:2024/06/08 06:18
int UnicodeToGB2312(char **dest, const WCHAR *src){char* buffer;int size = ::WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, 0, NULL, NULL);  // null termidated wchar''s bufferbuffer = new char[size];int ret = ::WideCharToMultiByte(CP_ACP, NULL, src, -1, buffer, size + 1, NULL, NULL);if (*dest != 0)delete *dest;*dest = buffer;return ret;}int Gb2312ToUnicode(WCHAR **dest, const char *src){int length = strlen(src);                // null terminated bufferWCHAR *buffer = new WCHAR[length + 1];   // WCHAR means unsinged short, 2 bytes                                           // provide enough buffer size for Unicodesint ret = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, length, buffer, length);buffer[ret] = 0;if (*dest != 0)delete *dest;*dest = buffer;return ret;}std::string & Utf8ToAnsi(std::string &scr, std::string &des){size_t n = scr.size()*2;wchar_t *sl = new wchar_t[n]; char *sm = new char[n];//多字节(UTF8)编码转换为宽字节编码MultiByteToWideChar(CP_UTF8,0,scr.c_str(),-1,sl,n); //宽字节转换为多字节(Ansi)编码WideCharToMultiByte(CP_ACP, 0,sl, -1,sm, n,NULL,0); des = sm;delete []sl;delete []sm; return des;} //Ansi编码转换为Unicode(Utf16)编码std::wstring & AnsiToUtf16(std::string &scr, std::wstring &des){size_t n = scr.size(); wchar_t *sl = new wchar_t[n+1]; MultiByteToWideChar(CP_ACP,0,scr.c_str(),-1,sl,n+1); des = sl;delete []sl; return des;}

原创粉丝点击