char*转wchar_t*

334 阅读1分钟

c++11实现

将char*的中文字符转为wchar_t*的字符,使用c++ 11的新特性智能指针,无需使用delete回收内存;
需要准备的头文件:stringwchar.hlocale.h
使用c的函数库mbstowcs(wchar_t* dst, const char* src, std::size_t len);

int toWchar(char *&src, wchar_t *&dest, const char *locale = "zh_CN.utf8") {
    if (src == NULL) {
        dest = NULL;
        return 0;
    }
    //根据环境变量设置locale
    setlocale(LC_CTYPE, locale);
    int w_size = mbstowcs(NULL, src, 0) + 1;
    //w_size=0说明mbstowcs返回值为-1。即在运行过程中遇到了非法字符(很有可能使locale没有设置正确)
    if (w_size == 0) {
        dest = NULL;
        return -1;
    }
    dest = auto_ptr<wchar_t >(new wchar_t [w_size]).get();
    if (!dest)
        return -1;
    int ret = mbstowcs(dest, src, MB_CUR_MAX);
    if (ret <= 0)
        return -1;
    return ret;
}