2015년 9월 5일 토요일

Windows Programming 공부하면서..(1)

Character Sets의 종류와 특성


SBCS(single byte character set)
  • 1바이트만을 사용하는 방식
  • 아스키코드가 대표적인 SBCS에 해당
MBCS(multi byte character set)
  • 어떤 문자는 1바이트로 표현하며, 어떤 문자는 2바이트로 표현
  • 유니코드는 MBCS에 속하지 않음.(MBCS는 SBCS를 포함한다.)
  • 효율적으로 보이지만, 프로그램을 구현하는데 세심한 주의가 필요
WBCS(wode byte charater set)
  • 2바이트만을 사용하는 방식
  • 유니코드가 대표적인 WBCS에 해당



간단한 예제 코드














배열의 크기 : ABC(3) + 한글(4) + NULL(1) = 8Byte
문자열 길이 : ABC(3) + 한글(4) = 7

5가 아니라 7이 나왔다. 곧 한글은 2글자가 아니라 4글자로 인식되었다는 것을 확인 할 수 있는데. 이는 MBCS에 최대 단점 중 하나이다.



WBCS예제

char 대신 wchar_t사용. char는 1바이트, wchar_t형은 2바이트 메모리 공간이 할당된다



wchar_t 변수는 변수값을 입력할 때 문자열 앞에 'L'을 붙여 줘야 한다.







' L"ABC" '로 인자에 넣어줬기 때문에 2byte씩 할당되며, 'ABC\n' = 8byte가 할당된다.
문자열 길이는 'ABC' = 3이 나온다.


문자열 조작하는 SBCS함수 . WBCS 함수

  • strlen , size_t wcslen (const wchar_t* string);
  • strcpy , wchar_t wcscpy (wchar_t* dest, const wchar_t* src);
  • strncpy , wchar_t* wcsncpy (wchar_t* dest, const wchar_t* src, size_t cnt);
  • strcat , wchar_t* wcscat(wchar_t* dest. const wchar_t* src);
  • strncat , wchar_t* wcsncat(wchar_t* dest, const wchar_t* src, sizr_t cnt);
  • strcmp , int wcscmp (const wchar_t* s1, const wchar_t* s2);
  • strncmp , int wcsncmp (const wchar_t* s1, const wchar_t* s2, size_t cnt);





문자열 입.출력 함수 SBCS 기반, WBCS 기반

  • printf , int wprintf (const wchar_t* format [, argument]...);
  • scanf , int wscanf (const wchar_t* format [,argument]...);
  • fgets , wchar_t* fgetws (wchar_t* string, int n, FILE* stream);
  • fputs int fputws (const wchar_t* string, FILE* stream);


main과 wmain에 차이 정리


wmain을 사용하면 문자열 앞에 "L"이 입력된다. 곧 유니코드를 사용하기 위해 직접 L을 넣어줄 필요가 없다.


댓글 없음:

댓글 쓰기