Windows System Programming ASCII vs Unicode Character Set

  • Slides: 24
Download presentation
Windows System Programming -ASCII vs Unicode-

Windows System Programming -ASCII vs Unicode-

Character Set - 약속된 문자의 표현방법 - WBCS 기반의 프로그래밍 [char 을 대신하는 wchar_t]

Character Set - 약속된 문자의 표현방법 - WBCS 기반의 프로그래밍 [char 을 대신하는 wchar_t] • ANSI 표준에서 유니코드 지원을 위해서 정의한 표준 자료형 • typedef unsigned short wchar_t; [“ABC”을 대신하는 L“ABC”] • 문자 L은 “유니코드 기반(WBCS 기반)으로 표현하라”는 의미 • L”ABC”는 널(NULL) 문자 포함 총 8바이트 [strlen을 대신하는 wcslen] 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, size_t cnt); strcmp int wcscmp(const wchar_t* s 1, const wchar_t* s 2); strncmp int wcsncmp(const wchar_t* s 1, const wchar_t* s 2, size_t cnt); 과제: 바로 전 MBCS 1. cpp를 유니 코드 버전으로 변경한다. 2009 -03 -18 호남대학교 정보통신공학과 10

Character Set - 약속된 문자의 표현방법 - WBCS 기반의 프로그래밍 SBCS 함수 WBCS 기반의

Character Set - 약속된 문자의 표현방법 - WBCS 기반의 프로그래밍 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); gputs int fputws(const wchar_t* string, FILE* stream); ※주석: wprintf, fputws와 같은 함수들을 통해 서 유니코드 기반으로 한글을 출력하는 작업 2009 -03 -18 호남대학교 정보통신공학과 11

MBCS→WBCS 1. 자료형 char wchar_t 2. 문자열 “abcd” L”abcd” 3. 함수 printf wprintf, strlen

MBCS→WBCS 1. 자료형 char wchar_t 2. 문자열 “abcd” L”abcd” 3. 함수 printf wprintf, strlen wcslen 4. main 함수 main(int, char*) wmain(int, wchar_t*) 2009 -03 -18 호남대학교 정보통신공학과 13

MBCS와 WBCS의 동시 지원 tchar. h #ifdef _UNICODE //unicode 지원시스템영역 typedef wchar_t //기타시스템(SBCS) 영역

MBCS와 WBCS의 동시 지원 tchar. h #ifdef _UNICODE //unicode 지원시스템영역 typedef wchar_t //기타시스템(SBCS) 영역 typedef char TCHAR; #else TCHAR; #endif 2009 -03 -18 호남대학교 정보통신공학과 16

MBCS와 WBCS의 동시 지원 TCHAR 자료형 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE

MBCS와 WBCS의 동시 지원 TCHAR 자료형 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE #include <stdio. h> #include <tchar. h> #include <windows. h> typedef wchar_t #else int _tmain(int argc, TCHAR* argv[]) { TCHAR str[] = _T("1234567"); int size = sizeof(str); _tprintf(_T("string length: %d n"), size); } TCHAR; typedef char TCHAR; #endif return (0); TCHAR wchar_t 2009 -03 -18 호남대학교 정보통신공학과 17

MBCS와 WBCS의 동시 지원 _T(x) 문자열 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE

MBCS와 WBCS의 동시 지원 _T(x) 문자열 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE #define __T(x) L ## x #else #define __T(x) x #endif #include <stdio. h> #include <tchar. h> #include <windows. h> int _tmain(int argc, TCHAR* argv[]) { TCHAR str[] = _T("1234567"); int size = sizeof(str); _tprintf(_T("string length: %d n"), size); } #define _T(x) __T(x) #define _TEXT(x) __T(x) return (0); _T("1234567") __T("1234567") L "1234567" 2009 -03 -18 호남대학교 정보통신공학과 18

MBCS와 WBCS의 동시 지원 _tprintf 함수 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE

MBCS와 WBCS의 동시 지원 _tprintf 함수 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE #include <stdio. h> #include <tchar. h> #include <windows. h> #define _tprintf #else int _tmain(int argc, TCHAR* argv[]) { TCHAR str[] = _T("1234567"); int size = sizeof(str); _tprintf(_T("string length: %d n"), size); } wprintf #define tprintf #endif return (0); _tprintf wprintf 2009 -03 -18 호남대학교 정보통신공학과 19

MBCS와 WBCS의 동시 지원 _tmain함수 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE #define

MBCS와 WBCS의 동시 지원 _tmain함수 #define UNICODE #define _UNICODE //#undef _UNICODE #ifdef _UNICODE #define _tmain wmain #define _t. Win. Main w. Win. Main #define _tenviron _wenviron #define __targv __wargv #else #define _tmain #define _t. Win. Main #ifdef _POSIX_ #define _tenviron #else #define _tenviron _environ #endif #define __targv __argv #endif #include <stdio. h> #include <tchar. h> #include <windows. h> int _tmain(int argc, TCHAR* argv[]) { TCHAR str[] = _T("1234567"); int size = sizeof(str); _tprintf(_T("string length: %d n"), size); } return (0); _tprintf wprintf 2009 -03 -18 호남대학교 정보통신공학과 20

MBCS와 WBCS의 동시 지원 유니코드 한글 출력하기 #include <stdio. h> #include <string. h> #include

MBCS와 WBCS의 동시 지원 유니코드 한글 출력하기 #include <stdio. h> #include <string. h> #include <locale. h> int wmain(int argc, wchar_t* argv) { wchar_t str[] = L"ABC한글"; int size = sizeof(str); int len = wcslen(str); _wsetlocale(LC_ALL, L"korean"); wprintf(L"배열의크기: %d n", size); wprintf(L"문자열길이: %d n", len); } 2009 -03 -18 return 0; 호남대학교 정보통신공학과 21