티스토리 뷰

책) 뇌를 자극하는 윈도우즈 시스템 프로그래밍

 

SBCS(single Byte Character Set)

  • 문자를 표현하는데 1byte만 사용하는 방식
  • 아스키코드가 대표적인 SBCS 방식이다.

MBCS(Multi Byte Character Set)

  • 다양한 바이트수를 사용해서 문자를 사용하는 방식
  • 어떤 문자는 1바이트, 어떤 문자는 2바이트로 표현한다.
  • 단 프로그램을 구현하는데 있어서 세심한 주의가 필요

WBCS(Wide Byte Character Set)

  • 모든 문자를 2byte로 처리하는 방식
  • 유니코드가 해당된다.

WBCS 기반의 프로그래밍

[char을 대신하는 wchar_t]

  • typedef unsigned short wchar_t;

 

["ABC"를 대신하는 L"ABC"]

  • wchar_t str[] = L"ABC";

[ 문자열 조작 함수 ]

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 wchar_t* wcscmp(wchar_t* s1, const wchar_t* s2);
strncmp wchar_t* wcsncmp(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);
fpus int fputws(const wchar_t* string, FILE* stream);

 

아래는 MBCS와 WBCS(유니코드)를 동시에 지원하기 위한 자료형입니다.

// #include<windows.h> 에 있는 코드들입니다.

typedef char 			CHAR;
typedef wchar_t 		WCHAR;

typedef CHAR *			LPSTR;
typedef CONST CHAR *		LPCSTR;

typedef WCHAR *			LPWSTR;
typedef CONST WCHAR *		LPCWSTR


#ifdef UNICODE
	typedef WCHAR	TCHAR;
    	typedef LPWSTR	LPTSTR;
    	typedef LPCWSTR LPCTSTR;
#else
	typedef CHAR	TCHAR;
    	typedef LPSTR	LPTSTR;
    	typedef LPCSTR LPCTSTR;
#endif

// 함수들은 str, wcs빼고 _tcs를 붙이면 됩니다
_tprintf, _tscanf, _fgetts, _fputts만 다릅니다.

활용 코드입니다.

#pragma warning(disable:4996)
#define UNICODE
#define _UNICODE

#include<stdio.h>
#include<tchar.h>
#include<windows.h>

int _tmain(void) {
	LPTSTR str1 = (LPTSTR)_T("MBCS or WBCS 1");
	TCHAR str2[] = _T("MBCS or WBCS 2");
	TCHAR str3[100];
	TCHAR str4[50];

	LPCTSTR pStr = str1;

	_tprintf(_T("string size : %d\n"), sizeof(str2));
	_tprintf(_T("string length : %d\n"), _tcslen(pStr));
	
	_fputts(_T("Input String 1 : "), stdout);
	_tscanf(_T("%s"), str3);
	_fputts(_T("Input String 2 : "), stdout);
	_tscanf(_T("%s"), str4);

	_tcscat(str3, str4);

	_tprintf(_T("string1 + string 2 : %s\n"), str3);
	return 0;
}

'서버 공부 > 시스템 프로그래밍' 카테고리의 다른 글

쓰레드 구현 모델  (0) 2022.07.28
(IPC통신) Named Pipe 통신  (0) 2022.07.27
CMD 창 만들기 ( 6장 )  (0) 2022.07.27
(C언어) 프로세스 실행 함수 및 실행  (0) 2022.07.27
프로세스란?  (0) 2022.07.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함