• 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;
    }
  • 相关阅读:
    14、python基础
    13、Python入门
    12、运算符、流程控制
    10、Linux(六)
    Windows 分层窗口 桌面上透明 Direct3D
    Windows 进程间通信 共享内存
    Linux 库的使用
    FFmpeg 命令行
    FFmpeg 摄像头采集
    FFmpeg input与output 函数流程
  • 原文地址:https://www.cnblogs.com/buyishi/p/10460797.html
Copyright © 2020-2023  润新知