使用标准C++库,宽字符wchar如何转char递增输出?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用标准C++库,宽字符wchar如何转char递增输出?相关的知识,希望对你有一定的参考价值。
如:
const wchar* p=L"a中国";
输出要求转是const char *
a
a中
a中国
Example
/* WCSTOMBS.C illustrates the behavior of the wcstombs function. */
#include <stdio.h>
#include <stdlib.h>
void main( void )
int i;
char *pmbbuf = (char *)malloc( MB_CUR_MAX );
wchar_t *pwchello = L"Hello, world.";
printf( "Convert wide-character string:\\n" );
i = wcstombs( pmbbuf, pwchello, MB_CUR_MAX );
printf( "\\tCharacters converted: %u\\n", i );
printf( "\\tMultibyte character: %s\\n\\n", pmbbuf );
Output
Convert wide-character string:
Characters converted: 1
Multibyte character: H 参考技术A Wcstombs功能可以
例如“
/ * WCSTOMBS.C说明了行为的wcstombs功能。* /
#的stdio。? >
包括
无效的主要(无效)
我;
的char * pmbbuf =(CHAR *)malloc的(MB_CUR_MAX);
wchar_t的* pwchello = L“你好,世界”;
printf的(“将宽字符的字符串:\ n”);
= wcstombs( pmbbuf,pwchello,MB_CUR_MAX);
printf的(“\ tCharacters转换:第%u \ n”,I);
printf的(“\ tMultibyte字符:%S \ N \ N”,pmbbuf); BR />
输出
将宽字符的字符串:
字符转换:1
多字节字符:H 参考技术B Wcstombs功能可以
例如“
/ * WCSTOMBS.C说明了行为的wcstombs功能。* /
#的stdio。? >
包括
无效的主要(无效)
我;
的char * pmbbuf =(CHAR *)malloc的(MB_CUR_MAX);
wchar_t的* pwchello = L“你好,世界”;
printf的(“将宽字符的字符串:\ n”);
= wcstombs( pmbbuf,pwchello,MB_CUR_MAX);
printf的(“\ tCharacters转换:第%u \ n”,I);
printf的(“\ tMultibyte字符:%S \ N \ N”,pmbbuf); BR />
输出
将宽字符的字符串:
字符转换:1
多字节字符:H 参考技术C 转成const char *后就无法判断一个字是占一个字节还是两个字节了。劝你还是直接现实wchar,显示起来比char*方便的多
怎样把Cstring转换成wchar
参考技术A 多字节 宽字节转换wchar_t是UNICODE码,
(1)多字节转成宽字节
wstring xx::converToWideChar( const string& str ) int len = 0; len = str.length(); int unicodeLen = ::MultiByteToWideChar(CP_UTF8,0,str.c_str(),-1,NULL,0); wchar_t * pUnicode; pUnicode = new wchar_t[unicodeLen+1]; memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); ::MultiByteToWideChar(CP_UTF8,0,str.c_str(),-1,(LPWSTR)pUnicode,unicodeLen); wstring rt; rt = ( wchar_t* )pUnicode; delete pUnicode; return rt; 使用时:
String input;<?xml:namespace prefix = o />
wstring wstrInput;
wstrInput = converToWideChar( input );
CString strText;
strText.Format( _T( “%s” ), wstrInput.c_str() );
(2)宽字节转成多字节
string BasicUtility::converToMultiChar( const wstring& str )
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_ACP,
0,
str.c_str(),
-1,
NULL,
0,
NULL,
NULL );
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_ACP,
0,
str.c_str(),
-1,
pElementText,
iTextLen,
NULL,
NULL );
string strText;
strText = pElementText;
delete[] pElementText;
return strText;
使用时:
CString strPdataFile;
string strKbFile;
strKbFile =converToMultiChar( ( LPCWSTR )strPdataFile )
以上是关于使用标准C++库,宽字符wchar如何转char递增输出?的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型