티스토리 뷰
책) 뇌를 자극하는 윈도우즈 시스템 프로그래밍
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 |
댓글