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, );
wchar_t *wcString = new wchar_t[requiredSize + ];
if (static_cast<size_t>(-) == mbstowcs(wcString, mbString, requiredSize + ))
{
cout << "Couldn't convert string: invalid multibyte character." << endl;
}
else
{
wcout << "wcString: " << wcString << endl;
}
delete[] wcString;
return ;
}

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

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

C/C++笔记之char *与wchar_t *的相互转换的更多相关文章

  1. 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换 [转]

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下. #ifndef USE_H_ #define USE_H_ # ...

  2. 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下:    #ifndef USE_H_     ...

  3. char* 和 wchar_t* 如何互相转换

    char* 和 wchar_t* 如何互相转换 C函数可以用 wcstombs - 将宽字符转换成多字符 WCHAR ->  CHAR      mbstowcs - 把多字符把转换成宽字符 C ...

  4. C++中char*与wchar_t*之间的转换

    http://blog.163.com/tianshi_17th/blog/static/4856418920085209414977/ 关于C++中的char*与wchar_t*这两种类型的相互转换 ...

  5. char 转wchar_t 及wchar_t转char

    利用WideCharToMultiByte函数来转换,该函数映射一个unicode字符串到一个多字节字符串.通常适合于window平台上使用. #include <tchar.h> #in ...

  6. 【转】char*,const char*和string的相互转换

    1. string转const char* string s = "abc"; const char* c_s = s.c_str(); 2. const char*转string ...

  7. 自己写实现char TO wchar_t 的转换

    wchar_t CharToWChart(char nChar){    wchar_t nR;    nR=nChar+32*256;    return nR;}//--------------- ...

  8. char,wchar_t 长度

    (测试环境:VC++6.0) char类型 wchar_t类型 类型大小(32位系统) 8位 16位 常量字符表示法 'A' L'A' 或 'A' 常量字符串表示法 'hello' L'hello' ...

  9. (c++) int 转 string,char*,const char*和string的相互转换

    一.int 和string的相互转换 1 int 转化为 string c++ //char *itoa( int value, char *string,int radix); // 原型说明: / ...

随机推荐

  1. [List] C#数组学习

    数组概述 C# 数组从零开始建立索引,即数组索引从零开始.C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似.但还有一些差异应引起注意.声明数组时,方括号 ([]) 必须跟在类型后面,而不是 ...

  2. centos 7安装golang1.10

    一.安装&配置 官方下载包(一般需要梯子) https://golang.org/dl/ wget https://dl.google.com/go/go1.10.linux-amd64.ta ...

  3. hdu 4183(网络流)

    Pahom on Water Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. AC日记——一元三次方程求解 洛谷 P1024

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  5. python 操作系统和进程

    一. 操作系统介绍 多道程序系统 多道程序设计技术       所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行.即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种 ...

  6. Wannafly挑战赛2 D.Delete(拓扑排序 + dij预处理 + 线段树维护最小值)

    题目链接  D.Delete 考虑到原图是个DAG,于是我们可以求出每个点的拓扑序. 然后预处理出起点到每个点的最短路$ds[u]$, 和所有边反向之后从终点出发到每个点的最短路$dt[u]$. 令点 ...

  7. 2016-2017 ACM-ICPC, South Pacific Regional Contest (SPPC 16)

    题目链接  Codeforces_Gym_101177 Problem A  Anticlockwise Motion 直接模拟即可 #include<iostream> #include ...

  8. 笔记-迎难而上之Java基础进阶6

    import java.io.*; public class InputStreamDemo{ public static void main(String[] args) throws IOExce ...

  9. PhoneGap_百度百科

    PhoneGap编辑 PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的 快速开发平台.它使开发者能够利用iPhone,Android,Palm,Sym ...

  10. 【转】supervisord使用

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...