문자셋
- 아스키코드 -> 1바이트(2의 8제곱)
- 유니코드 -> 2바이트(2의 16제곱)
> SBCS Single Byte Character Set
1byte
아스키코드
> MBCS Multi Byte Character Set
어떤 문자(경우에 따라)는 1Byte(SBCS를 포함), 어떤문자는 2Byte
아스키코드에서 정의 -> 1Byte
아스키코드에서 정의 안함 -> 2Byte
> WBCS Wide Byte Character Set
모든 문자를 2Byte
유니코드
WBCS 기반 프로그래밍 (유니코드)
> char 대신 wchar_t 사용
( typedef unsigned short wchar_t; )
cf."ABC" => L"ABC"
이 경우 널문자를 포함해서 총 8바이트가 됨 (널 문자도 2바이트)
Windows2000 이상의 OS는 기본적으로 유니코드를 지원하기 때문에 printf함수도 SBCS기반함수와 WBCS기반함수 사이에서 문자열 형태로 구분 하지만 Windows2000 이상의 운영체제에서 위와 같은 함수가 호출된다면 OS는 문자열을 내부적으로 2byte 유니코드 형식으로 변환한다.
ex) printf("Hello world!"); -> wprintf(L"Hello world!");
cf.유니코드 기반인 한글을 출력하고 싶으면,
#include "locale.h"
_wsetlocale(LC_ALL, L"korean");
cf. #define _tmain wmain
_tmain()은 유니코드 지원이 필요한 프로그램이면 wmain()
필요하지 않은 프로그램이면 main()
cf. 메모장에서는 자동으로 파일앞에 BOM(0xFFFE)를 넣으니 주의
cf. 줄바꿈은 \r\n 으로 해야함
MBCS와 WBCS의 동시 지원
1)윈도우에서 정의하고 있는 자료형
Windows 스타일의 자료형 이름이 대문자로 구성되는 흐름을 따라가기 위한 것
typedef char CHAR;
typedef wchar_t WCHAR;
(windef.h)
#define CONST const
(winnt.h)
typedef CHAR * LPSTR;
typedef CONST CHAR * LPCSTR;
typedef WCHAR * LPWSTR;
typedef CONST WCHAR * LPCWSTR;
cf. 윈도우 스타일 자료형은
1> 편의성(긴 타입을 줄임) 2> 확장성과 용이성(타입을 한번에 바꿀 수 있음)
때문에 사용함
cf. 포인터와 배열은 다르므로 구분함
2)나누어 구현함의 불편함을 해소 하고자 윈도우에서는 매크로를 이용
'programing' 카테고리의 다른 글
비동기 + IOCP + 파일 출력 작업 (0) | 2017.03.06 |
---|---|
문자열 변환 (0) | 2015.05.08 |
Type Casting : CString <=> std::string <=> std:wstring 상호변환 (0) | 2014.10.20 |