char * 和 wchar* 互转

2019-05-25  本文已影响0人  星星之火666

功能:将多字节编码字符串转换成宽字符编码字符串(char* 转 wchar*)。
头文件:#include <stdlib.h>。
函数原型:
errno_t __cdecl mbstowcs_s(size_t * _PtNumOfCharConverted, wchar_t * _DstBuf, size_t _SizeInWords, const char * _SrcBuf, size_t _MaxCount );
参数说明:
_PtNumOfCharConverted:指向转换后的字符串的长度加上结束符(单位wchar_t);
_DstBuf:指向转换后的字符串首地址;
_SizeInWords:目的地址最大字空间大小(单位wchar_t);
_SrcBuf:源多字节字符串首地址;
_MaxCount:最多可存入宽字符串缓冲中的字符个数,用于裁剪转换后的宽字符串。
返回值:成功返回0, 失败则返回失败代码。

函数功能:将宽字符编码字符串转换成多字节编码字符串(wchar* 转 char*)。
函数原型:errno_t wcstombs_s( size_t *pReturnValue, char *mbstr, size_t sizeInBytes, const wchar_t *wcstr, size_t count );
头文件: <stdlib.h>。
参数说明:
pReturnValue: The number of characters converted. ----- 转换后的多字节字符串的字符数;
mbstr: The address of a buffer for the resulting converted multibyte character string. ----- char类型的字符或字符串的地址 (接收转换后的字符串的缓冲区);
sizeInBytes: The size in bytes of the mbstr buffer. ----- 用来接收转换后字符char类型缓冲区的大小(以字节记);
wcstr: Points to the wide character string to be converted. ----- wchar_t类型的字符串的地址(需要转换的字符串的缓冲区的地址);
count: The maximum number of bytes to be stored in the mbstr buffer ----- 最多可以存入mbstr的字节数。
返回值: 成功返回0, 失败则返回失败代码

代码:

#include<iostream>
using namespace std;

int main()
{
    char* pStr = (char*)"12345shangshandalaohu";
    size_t len = strlen(pStr) + 1;
    size_t converted = 0;
    wchar_t* pws = new wchar_t[len];
    mbstowcs_s(&converted, pws, len, pStr, _TRUNCATE);
    wcout << "转换长度为:" << converted << ", 字符串:" << pws << endl;

    char* pc = new char[len];
    wcstombs_s(&converted, pc, len, pws, _TRUNCATE);
    cout << "转换长度为:" << converted << ", 字符串:" << pc << endl;
}
上一篇下一篇

猜你喜欢

热点阅读