VCにおける文字列プログラミング
#ifdef WIDECHAR//#ifdef /#ifndefは、本ファイル内で遡及するソース性を有する 上で認識できる 以下では認識できません
#endif
wchar_t *pszText=L"HelloT_char";
wprintf(L"%s",pszText);
#else
char *pszText="HelloT_char";
printf(「単%s」,pszText);
#endif
*/
wchar_の場合tタイプの文字列c言語の文字列に対応する操作にwを加える
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1.ANSICとUnicode文字
両者の違いはそれほど多くなく、1つの単バイト1つの2バイトで、Unicodeは漢字などの文字システムに適したより多くの文字を表すことができる.
ワイド文字の使用を定義するには、次の手順に従います.
2.Unicode文字と文字列の宣言方法:
_T()マクロにはtchar.hを含める必要がある
1 wchar_t c=L'A';
2 wchar_t szBuffer[10]=L"A String";3
WinNt.hはマクロを定義します.
#ifdef UNICODE
typedef WCHAR TCHAR ,*PTCHAR,PTSTR;
typedef CONST WCHAR *PCTSTR;
__TEXT(quote) quote
__TEXT(quote) L##quote
typedef CHAR TCHAR ,*PTCHAR,PTSTR;
typedef CONST CHAR *PCTSTR;
__TEXT(quote) quote
__TEXT(quote) quote TEXT(quote)
以上のマクロを使用して定義できます.Visual Studioで新しいプロジェクトを作成し、一般的にUnicodeオプションをオンにして、幅の広い文字を直接定義できます.
1 TCHAR C=TXET('a');// Unicode 16 , 8 2 TCHAR C=L'a';3 TCHAR szBuffer[10]=TEXT("a String");4 TCHAR szBuffer[10]=_T("a String");5
3.AnsicとUnicodeの変換:
*c =;
std::cout<
:
size_t wcstombs ( char * mbstr, const wchar_t * wcstr, size_t max );//Convert wide-character string to multibyte string
size_t mbstowcs ( wchar_t * wcstr, const char * mbstr, size_t max );//Convert multibyte string to wide-character string
4.
1). , char
2). TCHAR PTSTR
3). TEXT _T ,
4). BYTE PBYTE 、
5). printf , %s Ansic Unicode
MultiByteToWideChar WideCharToMutiByte, MSDN
6). Unicode , , :Com Unicode
.Net , API ANSIC
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
char CString 、string char 、string CString BSTR char*、char* BSTR、CString BSTR、BSTR CString
char* , string CString, , :
char CString :
CString cstr(_T());
wchar_t* wchar = cstr.GetBuffer();
* c1 = [cstr.GetLength()+]; cstr.ReleaseBuffer();
wcstombs(c1,wchar,cstr.GetLength()+);
std::cout<
:
CString , GetBuffer() ANSIC UNICODE , Unicode
, wcstombs 。 VC6 Unicode,
string char :
s1();
* c3 = [s1.size()+];
strcpy(c3,s1.c_str()); std::cout<
:
string , c_str() ANSIC , char, , mbstowcs
string CString :
CString cstr2;
s3 = ;
* c5 = [s3.size()+];
wchar_t* c6 = wchar_t[s3.size()+];
strcpy(c5,s3.c_str());
mbstowcs(c6,c5,s3.size()+);
cstr2.Format(_T(),c6); ::MessageBox(NULL,cstr2,NULL,);
delete c5;
delete c6;
CString cs1();
* c7 = [cs1.GetLength()+];
wcstombs(c7,cs1.GetBuffer(),cs1.GetLength()+);
s(c7);
std::cout<
:
:CString ANSIC UNICODE , string ANSIC
string CString char , , ANSIC UICODE
string string s(char* ); CString.GetBuffer() wchar_t*
BSTR char*、char* BSTR、CString BSTR、BSTR CString
(BSTR COM , , )
BSTR char* :
#include comment(lib, "comsupp.lib")
_tmain( argc, _TCHAR* argv[])
{
BSTR bstrText = ::SysAllocString(L);
* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); delete[] lpszText2;
;
}
_bstr_t b = bstrText;
* lpszText2 = b;
BSTR bstrText = ::SysAllocString(L);
BSTR bstrText = ::SysAllocStringLen(L,);
BSTR bstrText = ::SysAllocStringByteLen(,);
_variant_t strVar();
BSTR bstrText = strVar.bstrVal;
BSTR bstrText = _bstr_t(); , CComBSTR。 :
BSTR bstrText = CComBSTR();
CComBSTR bstr();
BSTR bstrText = bstr.m_str;
, ConvertStringToBSTR。
:
* lpszText = ;
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
CStringとBSTR :
コード#コード#CString str();
BSTR bstrText = str.AllocSysString();
…
SysFreeString(bstrText); BSTR bstrText = ::SysAllocString(L);
CStringA str;
str.Empty();
str = bstrText;
CStringA str(bstrText);