在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
了解 长度 宽字符wchar_t的长度16位,可以用来显示中文等除英文外的其他文字, 窄字符 char 的长度 8 位,只能处理英文。 哪里可以见到 在VS2010, 2012, 2013集成环境下面创建win32控制台工程后可以看到一个叫做 _tmain的主函数,其参数— int argc, _TCHAR* argv[],查看定义_TCHAR的定义就是wchar_t。 另外关于_tmain与main的区别,请看_tmain()和main()区别—lucyjiayou 转换函数 头文件 #include <stdlib> 函数原型 //宽字符转换为窄字符 errno_t wcstombs_s( size_t *pReturnValue, //被修改的位数,作为返回的 char *mbstr, //转换后字符串(窄)的空间指针 size_t sizeInBytes, //我暂时理解为,允许操作窄字符缓冲区的字符的个数, //要比count大1,不能大过缓冲区最大长度 const wchar_t *wcstr, //指向要转换的宽字符字符串 size_t count ) ; //要转换的宽字符的个数; //窄字符转换为宽字符 errno_t mbstowcs_s( size_t *pReturnValue, //被修改的位数,作为返回的 wchar_t *wcstr, //转换后宽字符串的缓冲区指针 size_t sizeInWords, // 允许操作缓冲区中宽字符的个数 const char *mbstr, //指向要转换的窄字符的字符串 size_t count //要转换的窄字符的个数 );
操作 将宽字节的字符串转换为窄字符的字符串 1: #include <string> 2: #include <cstdlib>
3:
4: std::string ws2s(const std::wstring& ws) 5: {
6: std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C"; 7: setlocale(LC_ALL, "chs"); //中文地区 8: const wchar_t* _Source = ws.c_str(); 9: size_t _Dsize = ws.size() + 1; //比要转换的宽字符个数大1 10: char *_Dest = new char[_Dsize]; 11: memset(_Dest, 0, _Dsize); //初始化缓冲区 12: size_t i;
13: wcstombs_s(&i, _Dest, _Dsize, _Source, ws.size());
14: std::cout << "i:" << i << std::endl; 15: std::string result = _Dest; 16: delete[]_Dest;
17: setlocale(LC_ALL, curLocale.c_str()); //设置回原来的locale 18: return result; 19: }
将窄字节的字符串转换为宽字符的字符串 1: std::wstring s2ws(const std::string& s) 2: {
3: std::string curlLocale = setlocale(LC_ALL,NULL); 4: setlocale(LC_ALL, "chs"); 5: const char* _Source = s.c_str(); 6: size_t _Dsize = s.size() + 1;
7:
8: wchar_t* _Dest = new wchar_t[_Dsize]; 9: size_t i;
10: mbstowcs_s(&i, _Dest, _Dsize, _Source, s.size());
11: std::wstring result = _Dest;
12: delete[] _Dest;
13: setlocale(LC_ALL, curlLocale.c_str());
14: return result; 15: }
注意:窄字符与宽字符转换时要注意locale的转换,保存,与还原。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论