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'\0'。这句才是正解

另外,根据微软文档的描述,若参数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;
}

 

转载于:https://www.cnblogs.com/buyishi/p/10460797.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值