日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言char转cstring,CString、TCHAR*、char*转换 | 时刻需

發布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言char转cstring,CString、TCHAR*、char*转换 | 时刻需 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

char*、TCHAR*轉換CString

CString str(****)

下面詳細寫一下其它轉換

//

/*

***********************************************************************

* 函數: TransCStringToTCHAR

* 描述:將CString 轉換為 TCHAR*

* 日期:

***********************************************************************

*/

TCHAR* CPublic::CString2TCHAR(CString &str)

{

int iLen = str.GetLength();

TCHAR* szRs = new TCHAR[iLen];

lstrcpy(szRs, str.GetBuffer(iLen));

str.ReleaseBuffer();

return szRs;

}

/*

***********************************************************************

* 函數: TCHAR2Char

* 描述:將TCHAR* 轉換為 char*

* 日期:

***********************************************************************

*/

char* TCHAR2char(TCHAR* tchStr)

{

int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個字符,因此不用普通計算長度

char* chRtn = new char[iLen+1]

wcstombs(chRtn,tchStr,iLen+1);//轉換成功返回為非負值

return chRtn;

}

/*

***********************************************************************

* 函數: char2tchar

* 描述:將 char* 轉換為 TCHAR*

* 日期:

***********************************************************************

*/

TCHAR *char2tchar(char *str)

{

int iLen = strlen(str);

TCHAR *chRtn = new TCHAR[iLen+1];

mbstowcs(chRtn, str, iLen+1);

return chRtn;

}

/*

***********************************************************************

* 函數: CString2char

* 描述:將CString轉換為 char*

* 日期:

***********************************************************************

*/

char* CPublic::CString2char(CString &str)

{

int len = str.GetLength();

char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的長度中漢字算一個長度

memset(chRtn, 0, 2*len+1);

USES_CONVERSION;

strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));

return chRtn;

}

//參考

///

//Pocket PC上的UNICODE和ANSI字符串

//By Vassili Philippov, September 26, 2001.

//楊方思歧 譯

/*

***********************************************************************

* 函 數 名:GetAnsiString

* 描 述:將CString(unicode)轉換為char*(ANSI)

* 參 數:CString &s 要轉換的CString

* 返 回 值:返回轉換結果

* 創建日期:

* 最后修改:

***********************************************************************

*/

char* GetAnsiString(const CString &s)

{

int nSize = 2*s.GetLength();

char *pAnsiString = new char[nSize+1];

wcstombs(pAnsiString, s, nSize+1);

return pAnsiString;

}

//

WideCharToMultiByte和MultiByteToWideChar函數的用法

支持Unicode編碼,需要多字節與寬字節之間的相互轉換

WideCharToMultiByte的代碼頁用來標記與新轉換的字符串相關的代碼頁。

MultiByteToWideChar的代碼頁用來標記與一個多字節字符串相關的代碼頁。

常用的代碼頁由CP_ACP和CP_UTF8兩個。

使用CP_ACP代碼頁就實現了ANSI與Unicode之間的轉換。

使用CP_UTF8代碼頁就實現了UTF-8與Unicode之間的轉換。

wstring AnsiToUnicode(( const string& str )

{

int len = 0;

len = str.length();

int unicodeLen = ::MultiByteToWideChar( CP_ACP, 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_ACP,0, str.c_str(),-1, (LPWSTR)pUnicode, unicodeLen );

wstring rt;

rt = ( wchar_t* )pUnicode;

delete pUnicode;

return rt;

}

string UnicodeToAnsi( 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;

}

wstring UTF8ToUnicode(( 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 UnicodeToUTF8( const wstring& str )

{

char* pElementText;

int iTextLen;

// wide char to multi char

iTextLen = WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, NULL, 0, NULL, NULL );

pElementText = new char[iTextLen + 1];

memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );

::WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, pElementText,iTextLen,NULL,NULL );

string strText;

strText = pElementText;

delete[] pElementText;

return strText;

}

總結

以上是生活随笔為你收集整理的c语言char转cstring,CString、TCHAR*、char*转换 | 时刻需的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。