一.windows下单转换方式
1.宽字符串转化为多字节字符串
1) 利用WideCharToMultiByte函数
wchar_t *pwszBuf = L"Unicode宽字符";
int nLen = wcslen(pwszBuf) * 2 + 1; //或者通过下面一行的代码获取所需长度
// int nLen = WideCharToMultiByte(CP_ACP, 0, pwszBuf, -1, NULL, 0, NULL, NULL);
char * pszBuf = new char[nLen];
nLen = WideCharToMultiByte(CP_ACP, 0, pwszBuf, -1, pszBuf, nLen, NULL, NULL); // 长度中包含'\0'字符
2 )利用wcstombs函数
wchar_t *pwszBuf = L"Unicode宽字符";
int nLen = wcslen(pwszBuf) * 2 + 1;// 或者通过下面一行的代码获取所需长度
//int nLen = wcstombs(NULL, pwszBuf, 0) + 1;
char * pszBuf = new char[nLen];
nLen = wcstombs(pszBuf, pwszBuf, nLen); // 长度中不包含'\0'字符
2.多字节字符串转化为宽字符串
1) 利用MultiByteToWideChar函数
char *pszBuf = "ANSI多字节字符";
int nLen = strlen(pszBuf) + 1; // 或者通过下面一行的代码获取所需长度
// int nLen = MultiByteToWideChar(CP_ACP, 0, pszBuf, -1, NULL, 0);
wchar_t *pwszBuf = new wchar_t[nLen];
nLen = MultiByteToWideChar(CP_ACP, 0, pszBuf, -1, pwszBuf, nLen);
2 )利用mbstowcs函数
char *pszBuf = "ANSI多字节字符";
int nLen = strlen(pszBuf) + 1; // 或者通过下面一行的代码获取所需长度
// int nLen = mbstowcs(NULL, pszBuf, 0) + 1;
wchar_t *pwszBuf = new wchar_t[nLen];
nLen = mbstowcs(pwszBuf, pszBuf, nLen);
二.linux下的转换