wchar_t* wszString = L"男性";
//预转换,得到所需空间的大小,这次用的函数和上面名字相反
int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
//同上,分配空间要给'\0'留个空间
//UTF8虽然是Unicode的压缩形式,但也是多字节字符串,所以可以以char的形式保存
char* szU8sex = new char[u8Len + 1];
//转换
//unicode版对应的strlen是wcslen
int size = wcslen(wszString);
::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), szU8sex, u8Len, NULL, NULL);
//最后加上'\0'
szU8sex[u8Len] = '\0';
char sBuf[25]={0}; strcpy(sBuf, "我最棒");
//获取输入缓存大小
int sBufSize=strlen(sBuf);
//获取输出缓存大小 //VC++ 默认使用ANSI,故取第一个参数为CP_ACP DWORD
dBufSize=MultiByteToWideChar(CP_ACP, 0, sBuf, sBufSize, NULL, 0);
printf("需要wchar_t%u个\n", dBufSize);
wchar_t * dBuf=new wchar_t[dBufSize];
wmemset(dBuf, 0, dBufSize); //进行转换
int nRet=MultiByteToWideChar(CP_ACP, 0, sBuf, sBufSize, dBuf, dBufSize);