본문 바로가기
프로그래밍/C++

VC++ 자료형 외 표현범위

by 건우아빠유리남편 2009. 10. 30.
반응형

C 자료형 (unsigned 생략)
char
[1byte] : -128 ~ 127
short [2byte] : -32,768 ~ 32,767
int[2byte] : -32,768 ~ 32,767 : 16bit
int[4byte] : -2,147,483,648 ~ 2,147,483,647 : 32bit
long[4byte] : -2,147,483,648 ~ 2,147,483,647
float[4byte] : 3.4E +/ -38(7digite)
double[8byte] : 1.7E +/ -308(15digit)
long double[8byte] : 1.2E +/ -4392(19digits)
bool [1byte] : 1/0

Win32 자료형
BOOL[1byte] : 0/1
UCHAR[1byte] : 0 ~ 255
BYTE[1byte] : 0 ~ 255
WORD[2byte] : 0 ~ 65,535
DWORD[4byte] :  0 ~ 4,294,967,295
UINT[4byte] : 0 ~ 4,294,967,295
LONG[4byte] : -2,147,483,648 ~ 2,147,483,647
LONGLONG[8byte] : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
__int8
[1byte] : -128 ~ 127
__int16[2byte] : - 32,768 ~ 32,767
__int32[4byte] : -2,147,483,648 ~ 2,147,483,647
__int64[8byte] : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
HANDLE[4byte] : -2,147,483,648 ~ 2,147,483,647
wchar_t[2byte] : unicode
OLECHAR : wchar_t
LPOLESTR : LPWSTR
LPCOLESTR : LPCWSTR
OLESTR(x) = T(x)

문자열
L : Long (16bit os 와 하위 호환으로 남겨둠.)
P : Pointer
C : Const
W : Wide(2byte)
T : 매크로 선언시 Multibyte 환경이면 1byte, Unicode 환경이면 2byte(wchar)형태로 변경함
STR : String
ex) LPSTR,LPWSTR,LPTSTR,LPCSTR,LPCWSTR..

COM
BSTR : 문자열의 길이를 문자열 시작 4byte에 기록한뒤 unicode문자열을 저장함(00 00으로 종료문자)
LPCWSTR -> BSTR : 생성안됨. 생성함수를 이용해야 함.
                     BSTR bstr = sysAllocString(L"TestBSTR"); // 메모리 할당
                     sysFreeString(bstr);         // 메모리 제거
VARIANT: 문자열이 들어올때 BSTR과 동일


CRT(c runtime library)지원 스트링 클래스 (#include "comdef.h")
_bstr_t
        :BSTR 랩퍼 클래스, 메모리 할당/제거를 자동으로 수행
        . LPCSTR, LPCWSTR  -> _bstr_t
          :_bstr bstr = "hello hi";
        . _bstr_t -> LPCSTR, LPCWSTR
          : LPCSTR psz1 = (LPCSTR)bs1;
        . _bstr_t -> BSTR
          : 형변환 안됨. 함수이용
            BSTR bstr = bs1.copy();
            sysFreeString(bstr); // BSTR은 사용후 메모리 해제를 해야함.
   4-2. _variant_t
        :VARIANT 랩퍼 클래스, 메모리 할당/제거 자동 수행
       
        . LPCSTR, LPCWSTR -> _variant_t
          : _variant_t v1 = "hello hi";
        . _variant_t -> _bstr_t -> LPCSTR,LPCWSTR
          : LPCSTR psz1 = (LPCSTR)(_bstr_t)v1;
5. ATL 지원 스트링클래스
   5-1 CComBSTR : BSTR랩퍼클래스, 메모리할당/제거 자동 수행
      . LPCSTR, LPCWSTR -> CComBSTR
        CComBSTR bs1 = "hello hi";
      . CComBSTR -> BSTR -> LPCWSTR
        BSTR bs = (BSTR)bs1;
      . BSTR -> CComBSTR
        CComBSTR bs2; bs2.Attach(W2BSTR(L"hello hi");
   5-2 CComVariant: VARIANT랩퍼클래스, 메모리할당/제거 자동 수행
      . LPCSTR, LPCWSTR -> CComVariant
        CComVariant bs1 = "hello hi";
      . CComVariant -> CComBSTR -> BSTR -> LPCWSTR
        CComBSTR bs = bs1.bstrVal;
6. STL 스트링
   6-1 string
       . LPCSTR -> string
         string str = "hello hi";
       . string -> LPCSTR (형변환 안됨. 함수 이용)
         LPCSTR psz = str.c_str();
   6-2 wstring
       . LPCWSTR -> wstring
         wstring str = "hello hi";
       . wstring -> LPCWSTR
         LPCWSTR psz = str.c_str();
7. MFC 스트링
   . LPCSTR, LPCWSTR -> CString
     CString str = "hello hi";
   . CString -> LPCTSTR
     1. LPCTSTR lpsz = (LPCTSTR)str;
     2. LPTSTR lptsz = str.getBuffer(0), str.ReleaseBuffer(); (올바른 사용)
     3. LPTSTR lptsz = (LPTSTR)(LPCTSTR)str; (잘못된 표현)
     4. CString -> BSTR
        BSTR bstr = str.AllocSysString(); sysFreeString(bstr);
8. VC7 스트링
   String: .Net에서 새로 정의한 스트링 클래스
          String* s1 = S"hello hi";
          CString s2(s1);
    
9. ETC
   1. BSTR --> LPCSTR
      USES_CONVERSION;
      LPCSTR lpaszTemp = OLE2CA(bstrValue);
   2. LPCSTR --> BSTR
      USES_CONVERSION;
      BSTR bstrTemp = ::SysAllocString(A2COLE(lpaszValue));
   3. CString --> LPCSTR
      1) ANSI 버전
          LPCSTR lpaszTemp = (LPCSTR) strValue;
      2) UNICODE 버전
          USES_CONVERSION;
          LPCSTR lpaszTemp = T2CA((LPCTSTR) strValue);
   4. LPCSTR --> CString
      1) ANSI 버전
         CString strTemp = lpaszValue;
      2) UNICODE 버전
          USES_CONVERSION;
          CString strTemp = A2CT(lpaszValue);

반응형

'프로그래밍 > C++' 카테고리의 다른 글

More Effective C++ 요약정리  (0) 2009.11.02
Effective c++ 인터넷문서  (0) 2009.11.01
야구하기_c++  (0) 2009.07.19
C++필기시험  (3) 2009.07.19
API실습_쓰레드_Made냐옹이  (0) 2009.07.19

댓글