[- Disclaimer -]
아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
SBCS (=Single Byte Character Set)
✦ 기존 Programming 환경
✦ 한 문자 당 1 Byte
✦ 한글 지원 불가
DBCS (=Dobule Byte Character Set)
✦ SBCS 한계를 넓히는 목적이었으나 프로그램 상 많이 불편
✦ 한 문자 당 2 Byte
✦ SBCS 미호환, 한글 등 타언어 사용 가능
MBCS (=Multi Byte Character Set)
✦ 현재 우리나라 Programming 환경
✦ 영어 한 문자 당 1 Byte
✦ 한글 한 문자 당 2 Byte
✦ 현재 PC 사양이 높아 MBCS보다 WBCS를 사용해도 되며 Code 가독성/안전성 측면에서도 좋음
MBCS 문제점
✦ 실제 문자열 크기 추측 어려움
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "ABC현금";
int size = sizeof(str);
int len = strlen(str);
printf("배열 크기: %d\n", size);
printf("문자열 크기: %d\n", len);
}
Plain Text
복사
배열 크기: 8
문자열 크기: 7
--------------------------------
Process exited after 0.3674 seconds with return value 15
계속하려면 아무 키나 누르십시오 . . .
Plain Text
복사
WBCS (=Wide Byte Character Set)
✦ Unicode Programming 환경
✦ 한 문자 당 2 Byte
✦ 현재 PC 사양이 높아 MBCS보다 WBCS를 사용해도 되며 가독성/안전성 측면에서도 좋음
✦ Unicode를 지원하는 종류의 것들은 TCHAR 자료형의 문자열도 지원
WBCS에서 변경된 사항
✦ 자료형 변경
✧ char(1)에서 wchar_t(2)로
char <-> TCHAR
char * <-> LPTSTR
const char * <-> LPCTSTR
Plain Text
복사
✦ 문자열 표현 변경
✧ Ex) “ABC” 에서 L”ABC”로
wchar_t str[] = L”ABC”;
Plain Text
복사
✦ 프로그램 시작점 함수 변경
✧ main()에서 wmain()로
✦ Parameter의 자료형/문자열은 Unocide의 자료형/문자열
문자열 컨트롤
✦ SBCS 문자열 제어 관련 함수
✧ strlen(), strnlen(), strcpy(), strncpy(), strcat(), strncat(), strcmp(), strncmp()
✦ DBCS 문자열 제어 관련 함수
✧ lstrlen(), lstrcpy(), lstrcat(), lstrcmp() 등
✦ WBCS 문자열 제어 관련 함수
✧ wcslen(), wcsnlen(), wcscpy(), wcsncpy(), wcscat(), wcsncat(), wcscmp(). wcsncmp()
✦ SBCS 문자열 I/O 함수
✧ printf(), sprintf(), scanf(), fgets(), fputs()
✦ WBCS 문자열 I/O 함수
✧ wprintf(), wsprintf(), wscanf(), fgetws(), fputws()
✦ MBCS/WBCS 동시 지원
✧ 조건부 Compile
✧ <tchar.h>에 포함되어 있음
✧ UNICODE 매크로 정의/비정의 여부에 따라 MBCS/WBCS 동시 지원 사용 가능
// <Windows.h>
(...)
#ifdef UNICODE
typedef wchar_t TCHAR;
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef char TCHAR;
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
(...)
Plain Text
복사
// <tchar.h>
(...)
#ifdef _UNICODE
#define __T(x) L## x
#else
#define __T(x) x
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
(...)
Plain Text
복사
// <tchar.h>
(...)
#ifdef _UNICODE
#define _tmain wmain
#define _tcslen wmain
#define _tprintf wmain
#define _tscanf wmain
#else
#define _tmain wmain
#define _tcslen wmain
#define _tprintf wmain
#define _tscanf wmain
#endif
(...)
Plain Text
복사
✦ MBCS/WBCS 동시 지원 - Ex)
LPTSTR str1 = _T("MBCS or WBCS 1");
TCHAR str2 = _T("MBCS or WBCS 2");
TCHAR str3[100];
TCHAR str4[50];
LPCTSTR pStr = strl;
_tprintf(_T("string size: %d \n"), sizeof(str2));
_tprintf(_T("string length: %d \n"), _tcslen(pStr));
_fputs(_T("Input String 1:"), stdout);
_tscanf(_T("%s"), str3);
Plain Text
복사
TEXT 매크로 사용
✦ Uniocde고 뭐고 유무 상관 없이 문자열 처리
TCHAR *str = "aapsemiordoenus";
Plain Text
복사
TCHAR *str = TEXT("aapsemiordoenus");
Plain Text
복사



