2012-02-11 19:20:34|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:C/C++, 字符处理|来源:唯设编程网
VC6.0里面默认的字符是多节字符,在VS2002以后增加了Unicode字符集的支持,在VC实际编程过程中,需要经常进行多字节宽字符相互转换,使用window.h提供的转换函数可以方便的实现宽字符和多节字符相互转换,网上搜集整理了一下,以供日后参考。
1.多节字符集转成宽字符
主要使用MultiByteToWideChar函数实现,实例如下:
string str;
cout<<"please input chinese"<<endl;
cin>>str;
//setlocale(LC_CTYPE,".chs");
const char* cstr1 = str.c_str();
//int len = 2*sizeof(cstr);
int WLen = MultiByteToWideChar(CP_ACP,
// code page
0,
// character-type options
cstr1,
// string to map
-1,
// number of bytes in string
NULL,
// wide-character buffer
0
// size of buffer
);
wchar_t * buffer = new wchar_t[WLen+1];
int RetWLen = MultiByteToWideChar(CP_ACP,
// code page
0,
// character-type options
cstr1,
// string to map
-1,
// number of bytes in string
buffer,
// wide-character buffer
WLen
// size of buffer
);
buffer[WLen] = '/0';
printf("/nthe translated num is %d",RetWLen);
2.宽字符转多字节
主要使用WideCharToMultiByte函数实现,实例如下:
//这里第六个参数若为表示返回宽字符对应多字节的长度
int MLen = WideCharToMultiByte(
CP_ACP,
// code page
0,
// performance and mapping flags
buffer,
// wide-character string
-1,
// number of chars in string
NULL,
// buffer for new string
0,
// size of buffer
NULL,
// default for unmappable chars
NULL
// set when default char used
);
char* MultiBte = new char[MLen+1];
//完成转换
int RetMLen = WideCharToMultiByte(
CP_ACP,
// code page
0,
// performance and mapping flags
buffer,
// wide-character string
-1,
// number of chars in string
MultiBte,
// buffer for new string
MLen,
// size of buffer
NULL,
// default for unmappable chars
NULL
// set when default char used
);
printf("/nthe translated MultiByte num is :%d",RetMLen);
printf("/nthe Multibyte value:");
MultiBte[MLen]='/x0';
fputs(MultiBte,stdout); //可直接在终端输出
需要导入头文件 windows.h,以上程序才能正常编译。