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;}
- mbstowcs函数 [转载]
- mbstowcs
- setlocale同mbstowcs函数的关系
- Linux两个函数mbstowcs() 与wcstombs()
- setlocale同mbstowcs函数的关系(ZZ)
- mbstowcs()/wcstombs() 函数 宽字符转多字符互转
- mbstowcs()/wcstombs()
- mbstowcs()/wcstombs()
- 关于char,wchar_t以及转化的函数mbstowcs,wcstombs,WideCharToMultiByte,MultiByteToWideChar
- mbstowcs and MultiByteToWideChar
- wcstombs和mbstowcs使用
- mbstowcs and MultiByteToWideChar
- wcstombs和mbstowcs使用
- mbstowcs 和 wcstombs
- mbstowcs,wcstombs,WideChar…
- 汉字to unicode && mbstowcs编辑
- setlocale 与 mbstowcs 的问题
- mbstowcs()与MultiByteToWideChar()的一点区别
- makefile 3
- jquery学习
- sql server三种恢复模式
- java枚举
- debian源码下载
- mbstowcs函数 [转载]
- Java多线程编程详解
- HDU 4441 Queue Sequence[Splay Tree]
- Linux驱动加载顺序
- debian /etc/apt/source.list
- arm gnu 汇编
- <Unix环境高级编程>apue.h在Fedora14下开发环境搭建
- 第十周上机任务--乘法口诀表
- servlet+mysql