mbstowcs函数 [转载]

来源:互联网 发布:windows桌面更新了很久 编辑:程序博客网 时间:2024/04/30 11:53

原文地址: http://blog.bitfly.cn/post/mbstowcs-func/

mbstowcs函数可以用了将multi-byte字符串转换为wide char字符串,是ISO/ANSI C标准函数。但是multi-byte受LC_CTYPE locale的变量的影响,需要设定为UTF-8才行。但是Windows上用setlocale没法设定为UTF-8,因此只能使用MultiByteToWideChar。

二者除了参数不同外,返回的size也不同(差一个结尾''的大小)。mbstowcs返回的长度不包含结尾'',MultiByteToWideChar则包含(准确的讲,是"MultiByteToWideChar does notnull-terminate an output string if the input string length is explicitlyspecified without a terminating null character. To null-terminate an outputstring for this function, the application should pass in -1 or explicitly countthe terminating null character for the input string.")。

完整代码:


#include  // for MultiByteToWideChar, WideCharToMultiByte#else#include  // for mbstocws, cwstombs#endifwchar_t* mb2wc(const char* mbstr){wchar_t* wcstr = NULL;// Get the size of wchar_t after converted#ifdef WIN32int size = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, NULL, 0);#elsesize_t size = mbstowcs(NULL, mbstr, 0);#endifwcstr = new wchar_t[size+1];if (wcstr){memset(wcstr, 0, size * sizeof(wchar_t));#ifdef WIN32int ret = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, wcstr, size);if (ret == 0) // MultiByteToWideChar returns 0 if it does not succeed.#elsesize_t ret = mbstowcs(wcstr, mbstr, size+1);if (ret == -1)#endif{delete[] wcstr;wcstr = NULL;}}return wcstr;}char* wc2mb(const wchar_t* wcstr){char* mbstr = NULL;// Get the size of char after converted#ifdef WIN32int size = WideCharToMultiByte(CP_UTF8, 0, wcstr, -1, NULL, 0, NULL, NULL);#elsesize_t size = wcstombs(NULL, wcstr, 0);#endifmbstr = new char[size+1];if (mbstr){memset(mbstr, 0, size * sizeof(char));#ifdef WIN32int ret = WideCharToMultiByte(CP_UTF8, 0, wcstr, -1, mbstr, size, NULL, NULL);if (ret == 0) // MultiByteToWideChar returns 0 if it does not succeed.#elsesize_t ret = wcstombs(mbstr, wcstr, size+1);if (ret == -1)#endif{delete[] mbstr;mbstr = NULL;}}return mbstr;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ps画板建小了怎么办 wps表格密码忘了怎么办 word文档变成虚的怎么办 wps论文中表格跨页怎么办 word文档复制过来有边框怎么办 wps表格跨页断开怎么办 锅的铆钉老是松怎么办 文胸不知道怎么染色了怎么办 未后的信息我该怎么办? 做leep手术后大出血怎么办 眼线笔出不了水怎么办 手机字体变成空心字怎么办 平安树树枝黑了怎么办 柳树被虫钻洞了怎么办 柳树叶子上有虫子怎么办 小金鱼翻肚皮了怎么办 秋天树叶没了小鸟怎么办 去国外旅游不会英语怎么办 橡皮树长了2米高怎么办 榕树盆景长的高怎么办? 2岁宝宝看书弯腰低头怎么办 excel表格打开很慢怎么办 3d模型有红线框怎么办 电视页面加载时错误怎么办 投屏显示加载视频错误怎么办 word遇到问题需要关闭怎么办 画眼线看不出来怎么办 14岁眼皮很松怎么办啊 ps存不了psd格式怎么办 花草上有白色物怎么办 ps抠出来有白边头发怎么办 脸上结痂掉了有红印怎么办 海棠花瓣干枯怎么办茎变软 微信上的图片打不开怎么办 口红吊兰老掉叶子怎么办 翠叶竹芋叶子卷怎么办 牙有龋齿垫底以后酸怎么办 事业单位辞职请示30天不批怎么办 孕早期吃了油菜怎么办 实体店买到翻新苹果手机怎么办 太阳花叶子蔫了怎么办