zoukankan      html  css  js  c++  java
  • C/C++笔记之char *与wchar_t *的相互转换

    char *和wchar_t *的相互转换,可使用标准库函数

    size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count)和size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count)

    注意

    微软文档对mbstowcs的描述有误,mbstowcs, _mbstowcs_l | Microsoft Docs

    若mbstowcs成功地转换了源字符串,它返回已转换的多字节字符的数量。这句话是错误的,应参考cppreference的描述std::mbstowcs - cppreference.com

    成功,则返回写入目标数组的宽字符的数量,不包括L''。这句才是正解

    另外,根据微软文档的描述,若参数wcstr为NULL,函数返回目标字符串的要求大小(以宽字符为单位)

    多字节字符串到宽字符串的转换示例

    #include <iostream>
    using namespace std;
    int main()
    {
        setlocale(LC_ALL, "");
        const char *mbString = "多字节字符串到宽字符串的转换";
        size_t requiredSize = mbstowcs(nullptr, mbString, 0);
        wchar_t *wcString = new wchar_t[requiredSize + 1];
        if (static_cast<size_t>(-1) == mbstowcs(wcString, mbString, requiredSize + 1))
        {
            cout << "Couldn't convert string: invalid multibyte character." << endl;
        }
        else
        {
            wcout << "wcString: " << wcString << endl;
        }
        delete[] wcString;
        return 0;
    }

    宽字符串到多字节字符串的转换示例

    #include <iostream>
    using namespace std;
    int main()
    {
        setlocale(LC_ALL, "");
        const wchar_t *wcString = L"宽字符串到多字节字符串的转换";
        size_t requiredSize = wcstombs(nullptr, wcString, 0);
        char *mbString = new char[requiredSize + 1];
        if (static_cast<size_t>(-1) == wcstombs(mbString, wcString, requiredSize + 1))
        {
            cout << "Couldn't convert string: invalid wide character" << endl;
        }
        else
        {
            cout << mbString << endl;
        }
        delete[] mbString;
        return 0;
    }
  • 相关阅读:
    用户组
    Compose
    ubuntu下不同版本python安装pip及pip的使用
    rest-framework-@action()装饰器
    数据库数据导出CSV文件,浏览器下载
    爬取拉钩网信息
    CSV模块
    DOM对象之查找标签&属性操作
    Java内存模型 一
    SQL优化之一
  • 原文地址:https://www.cnblogs.com/buyishi/p/10460797.html
Copyright © 2011-2022 走看看