C++实现String与UF8互转

 更新时间:2022年05月04日 17:08:54   作者:農碼一生  
这篇文章介绍了C++实现String与UF8互转的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

UTF8_To_String

#include<Stringapiset.h>
#include <iostream>

std::string UTF8_To_String(const std::string& str)
{
    int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);

    wchar_t* pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴 
    memset(pwBuf, 0, nwLen * 2 + 2);

    MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), pwBuf, nwLen);

    int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL);

    char* pBuf = new char[nLen + 1];
    memset(pBuf, 0, nLen + 1);

    WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);

    std::string retStr = pBuf;

    delete[]pBuf;
    delete[]pwBuf;

    pBuf = NULL;
    pwBuf = NULL;

    return retStr;
}

String_To_UTF8

#include<Stringapiset.h>
#include <iostream>
std::string String_To_UTF8(const std::string& str)
{
    int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);

    wchar_t* pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴 
    ZeroMemory(pwBuf, nwLen * 2 + 2);

    ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);

    int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);

    char* pBuf = new char[nLen + 1];
    ZeroMemory(pBuf, nLen + 1);

    ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);

    std::string retStr(pBuf);

    delete[]pwBuf;
    delete[]pBuf;

    pwBuf = NULL;
    pBuf = NULL;

    return retStr;
}

到此这篇关于C++实现String与UF8互转的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解c++实现信号槽

    详解c++实现信号槽

    这篇文章主要为大家介绍了c++实现信号槽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • C/C++读取大文件数据方式详细讲解

    C/C++读取大文件数据方式详细讲解

    这篇文章主要介绍了C语言/C++读取大文件数据的完整方式过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • C++&&Opencv实现控制台字符动画的方法

    C++&&Opencv实现控制台字符动画的方法

    这篇文章主要介绍了C++&&Opencv实现控制台字符动画的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • C语言中的二叉树和堆详解

    C语言中的二叉树和堆详解

    这篇文章主要介绍了C语言中的二叉树和堆详解,树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的,需要的朋友可以参考下
    2023-07-07
  • C C++ LeetCode题解在二叉树中增加一行示例详解

    C C++ LeetCode题解在二叉树中增加一行示例详解

    这篇文章主要为大家介绍了C C++ LeetCode题解在二叉树中增加一行示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • C++ push_back()函数使用详解

    C++ push_back()函数使用详解

    这篇文章主要介绍了C++ push_back()函数使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Qt实现自定义验证码输入框控件的方法

    Qt实现自定义验证码输入框控件的方法

    本文主要介绍了Qt实现自定义验证码输入框控件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C语言实现简单班级成绩管理系统

    C语言实现简单班级成绩管理系统

    这篇文章主要为大家详细介绍了C语言实现简单班级成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言学习之指针的使用详解

    C语言学习之指针的使用详解

    想突破C语言的学习,对指针的掌握是非常重要的,本文为大家总结了C语言中指针的相关知识点,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-10-10
  • C++中的for-each循环使用

    C++中的for-each循环使用

    范围循环是C++11引入的特性,用于简化数组和容器的遍历过程,它通过直接操作元素而不是使用索引或迭代器,范围循环可以使用引用或const修饰符来控制元素的修改权限,适用于所有支持begin()和end()方法的容器,该循环方式不适用于未提供这些方法的C++98/03容器
    2024-09-09

最新评论