1. C 자료형
char (1) , short (2) , int (4) , long (4), float (4) , double (8) , bool
문자 : char
char szName[20] = "kim";
2. WIN API 자료형
BYTE (1,unsigned char) , WORD (2,unsigned short) , UNIT (4, unsigned int) ,
DWORD (4,unsigned long) , LONG (4,long) , BOOL
문자 : UCHAR (unsigned char)
핸들 : 대상을 구분하는 4바이트 정수(HWND, HDC 등)
MBCS문자(열) 유니코드문자(열) 자동매크로문자(열)
char wchar_t TCHAR
LPSTR(char*) LPWSTR(wchar_t*) LPTSTR
LPCSTR(const char*) LPCWSTR LPCTSTR
(참조1) 문자열에 대해 그냥 습관적으로 LPTSTR 또는 LPCTSTR 를 써라
(참조2) 헝가리안명명법
w(WORD) , dw(DWORD) , i(int) , b(BOOL) , ch(문자) , sz(문자열) , h(핸들)
cb(바이트수) , a(배열)
(참조3) OLECHAR(wchar_t), LPOLESTR(LPWSTR), LPCOLESTR(LPCWSTR), OLESTR(x) = _T(x)
3. COM 스트링
BSTR : 문자열길이를 시작전에 저장하고, 이어서 유니코드문자열을 저장하는 방식
1> LPCWSTR -> BSTR : 생성안됨. 생성함수를 이용해야함
BSTR bstr = sysAllocString(L"Hi Bob"); // 메모리할당
sysFreeString(bstr); // 메모리제거
2> BSTR -> LPCWSTR : 형변환 가능
VARIANT : 문자열이 들어올때 BSTR과 동일
4. CRT(c runtime library) 지원 스트링클래스
_bstr_t : BSTR랩퍼클래스, 메모리할당/제거를 자동으로 수행
1> LPCSTR, LPCWSTR -> _bstr_t
_bstr_t bs1 = "char string"; // 생성
2> _bstr_t -> LPCSTR, LPCWSTR
LPCSTR psz1 = (LPCSTR)bs1; // 형변환
3> _bstr_t -> BSTR : 형변환안됨. 함수이용
BSTR bstr = bs1.copy();
sysFreeString(bstr); // BSTR은 사용후 메모리해제를 해야하는 불편이있음..
//참고 : _com_util에서 지원해주는 컨버트 함수
//_com_util::ConvertStringToBSTR()
//_com_util::ConvertBSTRToString()
_variant_t : VARIANT랩퍼클래스, 메모리할당/제거를 자동으로 수행
1> LPCSTR, LPCWSTR -> _variant_t
_variant_t v1 = "char string"; // 생성
2> _variant_t -> _bstr_t -> LPCSTR, LPCWSTR
LPCSTR psz1 = (LPCSTR)(_bstr_t)v1; //형변환
5. ATL 지원 스트링클래스
CComBSTR : BSTR랩퍼클래스, 메모리할당/제거를 자동으로 수행
1> LPCSTR, LPCWSTR -> CComBSTR
CComBSTR bs1 = "char string"; // 생성
2> CComBSTR -> BSTR -> LPCWSTR
BSTR bstr = (BSTR)bs1; // 형변환
(참조) BSTR -> CComBSTR
CComBSTR bs2; bs2.Attach(W2BSTR(L"Bob"))
CComVariant : VARIANT랩퍼클래스, 메모리할당/제거를 자동으로 수행
1> LPCSTR, LPCWSTR -> CComVariant
CComVariant bs1 = "char string"; // 생성
2> CComVariant -> CComBSTR -> BSTR -> LPCWSTR
CComBSTR bs2 = bs1.bstrVal;
6. STL 스트링
string
1> LPCSTR -> string
string str = "char string"; //생성
2> string -> LPCSTR : 형변환 안됨. 함수이용
LPCSTR psz = str.c_str();
wstring
1> LPCWSTR -> wstring
wstring str = "wide char string"; //생성
2> wstring -> LPCWSTR : 형변환 안됨. 함수이용
LPCWSTR psz = str.c_str();
7. MFC 스트링
CString
1> LPCSTR, LPCWSTR -> CString
CString str = "char string"; //생성
2> CString -> LPCTSTR :
LPCTSTR lpsz = (LPCTSTR)str; //형변환
(참고) CString -> LPTSTR : 함수이용
LPTSTR lptsz = str.GetBuffer(0); str.ReleaseBuffer(); // 올바른 사용
LPTSTR lptsz = (LPTSTR)(LPCTSTR)str // 잘못된 사용
CString -> BSTR
BSTR bstr = str.AllocSysString(); sysFreeString(bstr)
8. VC7 스트링
String : .NET에서 새로 정의한 스트링 클래스
String* s1 = S"this is nice"; // 생성
CString s2(s1); // 형변환
/////////////////////////////////////////////////////////////////////////////////////
1byte char문자와 2byte wide char 문자열 변환
/////////////////////////////////////////////////////////////////////////////////////
1. wsprintf 사용
/////////////////////////////////////////////////////////////////////////////////////
char sz[10] = "가나다라마";
TCHAR szw[10] = {0,}
wsprintf(szw, "%s", sz);
Windows.h
http://msdn.microsoft.com/en-us/library/ms647550(VS.85).aspx
/////////////////////////////////////////////////////////////////////////////////////
2. mbstowcs, wcstombs의 이용
/////////////////////////////////////////////////////////////////////////////////////
mbstowcs ;
<stdlib.h>
http://msdn.microsoft.com/en-us/library/k1f9b8cy(VS.80).aspx
wcstombs ;
http://msdn.microsoft.com/en-us/library/5d7tc9zw(VS.80).aspx
/////////////////////////////////////////////////////////////////////////////////////
3. MultiByteToWideChar, WideCharToMultiByte의 이용
/////////////////////////////////////////////////////////////////////////////////////
MultiByteToWideChar ;
<windows.h>
http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx
WideCharToMultiByte ;
http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx
/////////////////////////////////////////////////////////////////////////////////////
4. CString과 CStringW의 이용
/////////////////////////////////////////////////////////////////////////////////////
char sz[10] = "가나다라마";
TCHAR szw[10] = L"가나다라마";
//char -> wchar
CStringW strw(sz);
//wchar -> char
CString str(szw);
/////////////////////////////////////////////////////////////////////////////////////
5. USES_CONVERSION, A2W, W2A의 이용
/////////////////////////////////////////////////////////////////////////////////////
char sz[10] = "가나다라마";
TCHAR szw[10] = L"가나다라마";
USES_CONVERSION;
// char -> wchar
WCHAR* w = A2W( sz );
// wchar -> char
CHAR* c = W2A( szw );
/////////////////////////////////////////////////////////////////////////////////////
'Programming' 카테고리의 다른 글
File Signature (0) | 2011.12.23 |
---|---|
MFC에서 String 조작 함수들 (0) | 2011.12.06 |
후킹을 방어할 수 있는 방법 (0) | 2011.10.21 |
[Add-In] PInvoke.net (6) | 2010.12.21 |
[C#]Process Monitor (1) | 2010.11.19 |