#include<string>//標(biāo)準(zhǔn)C++;
string tp;
wchar_t *s;
char *d;
tp=s;
d=tp.c_str();
也可使用WideCharToString(wchar_t * Source);函數(shù)轉(zhuǎn)換
WideCharToMultiByte
MultiByteToWideChar
LPSTR = char *
LPCSTR = const char *
LPWSTR = wchar_t *
LPCWSTR = const wchar_t *
LPOLESTR = OLECHAR * = BSTR = LPWSTR(Win32)
LPCOLESTR = const OLECHAR * = LPCWSTR(Win32)
LPTSTR = _TCHAR *
LPCTSTR = const _TCHAR *
函數(shù)原型:
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);
參數(shù)說明:
1、CodePage
指定要轉(zhuǎn)換成的字符集代碼頁,它可以是任何已經(jīng)安裝的或系統(tǒng)自帶的字符集,可以選擇以下的代碼頁:
CP_ACP //當(dāng)前系統(tǒng)ANSI代碼頁
CP_MACCP //當(dāng)前系統(tǒng)Macintosh代碼頁
CP_OEMCP //當(dāng)前系統(tǒng)OEM代碼頁,一種原始設(shè)備制造商硬件掃描碼
CP_SYMBOL //Symbol代碼頁,用于Windows 2000及以后版本
CP_THREAD_ACP //當(dāng)前線程ANSI代碼頁,用于Windows 2000及以后版本
CP_UTF7 //UTF-7,設(shè)置此值時lpDefaultChar和lpUsedDefaultChar都必須為NULL
CP_UTF8 //UTF-8,設(shè)置此值時lpDefaultChar和lpUsedDefaultChar都必須為NULL
2、dwFlags
指定如何處理沒有轉(zhuǎn)換的字符,一般情況下設(shè)為0
WC_NO_BEST_FIT_CHARS //把不能直接轉(zhuǎn)換成相應(yīng)多字節(jié)字符的Unicode字符轉(zhuǎn)換成lpDefaultChar指定的默認(rèn)字符。
WC_COMPOSITECHECK //把合成字符轉(zhuǎn)換成預(yù)制的字符。它可以與后三個選項(xiàng)中的任何一個組合使用,如果沒有與他們中的任何一個組合,則與選項(xiàng)WC_SEPCHARS相同。
WC_ERR_INVALID_CHARS //此選項(xiàng)會致使函數(shù)遇到無效字符時失敗返回,并且GetLastError會返回錯誤碼ERROR_NO_UNICODE_TRANSLATION。否則函數(shù)會自動丟棄非法字符。此選項(xiàng)只能用于UTF8
WC_DISCARDNS //轉(zhuǎn)換時丟棄不占空間的字符,與WC_COMPOSITECHECK一起使用
WC_SEPCHARS //轉(zhuǎn)換時產(chǎn)生單獨(dú)的字符,此是默認(rèn)轉(zhuǎn)換選項(xiàng),與WC_COMPOSITECHECK一起使用
WC_DEFAULTCHAR //轉(zhuǎn)換時使用默認(rèn)字符代替例外的字符,(最常見的如"?"),與WC_COMPOSITECHECK一起使用
3、lpWideCharStr //要轉(zhuǎn)換的寬字符串
4、cchWideChar //要轉(zhuǎn)換寬字符串的長度,-1表示轉(zhuǎn)換到字符串結(jié)尾
5、lpMultiByteStr //接收轉(zhuǎn)換后輸出的字符串的緩沖區(qū)
6、cbMultiByte //輸出緩沖區(qū)大小,如果為0,lpMultiByteStr將被忽略,函數(shù)將返回所需緩沖區(qū)大小而不使用lpMultiByteStr。
7、lpDefaultChar //指向字符的指針,在指定編碼里找不到相應(yīng)字符時使用此字符作為默認(rèn)字符代替,如果為NULL則使用系統(tǒng)默認(rèn)字符
8、lpUsedDefaultChar //開關(guān)變量的指針,用以表明是否使用過默認(rèn)字符,可設(shè)為NULL
返回值:為0表示調(diào)用失敗
下面就來看看如何將wstring和wchar_t*轉(zhuǎn)換為string和char*
wstring轉(zhuǎn)換為string:
wstring wstr=_T("翔翔糖糖");
int size=WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,NULL,0,NULL,NULL);
char *ch=new char[size+1];
if(!WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,ch,size,NULL,NULL))
{
return false;
}
string str=ch;
wchar_t*轉(zhuǎn)換為char*:
wchar_t *wch=_T("翔翔糖糖");
int size=WideCharToMultiByte(CP_ACP,0,wch,-1,NULL,0,NULL,NULL);
char *ch=new char[size+1];
if(!WideCharToMultiByte(CP_ACP,0,wch,-1,ch,size,NULL,NULL))
{
return false;
}
wchar_t* wstr = L"A wide character string.";
char* ascii = new char[wcslen(wstr) + 1];
wcstombs( ascii, wstr, wcslen(wstr) );
另一種方法: char* localeInfo; wchar_t *pwchello = L"/x3042/x3043"; // 2 Hiragana characters wchar_t *pwc;
wchar_t*轉(zhuǎn)換為char*: size_t size; int requiredSize; requiredSize = wcstombs( NULL, pwchello, 0); pmbhello = (unsigned char *)malloc( requiredSize + 1); size = wcstombs( pmbhello, pwchello, requiredSize + 1);
char* 轉(zhuǎn)換為 wchar_t* size_t size; int requiredSize; requiredSize = mbstowcs(NULL, pmbhello, 0); pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t )); size = mbstowcs( pwc, pmbhello, requiredSize + 1);
請問怎么樣把string轉(zhuǎn)換到LPCTSTR
std::string str;
LPCTSTR lpstr = (LPCTSTR)str.c_str();