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);