이번에는 간단한 Windows 시스템 개발에 문자열 처리에 대한 포스팅을 진행하겠습니다!!

먼저 Windows 시스템 개발에서는 주로 Unicode를 많이 이용하는데요 이는 우리가 기존에 처음 배운 C언어의 문자열 처리와 약간의 차이가 있습니다!!

=>유니코드(2byte로 할당되어 유니코드 표기표에 따른 문자열 표시)

 

1. 자료형, 문자열

우선 유니코드 문자열을 담아두는 공간!! 자료형에 대해서 알아보겠습니다.

우선 기존의 문자열을 입력받는 가장 대표적인 자료형은 바로 char입니다!!

char 배열을 선언을 통해 문자열을 다음과 같이 입력받습니다. ㅎㅎㅎ

 

간단한 문자열을 입력받는 코드 입니다!

 

그리고 다음은 유니코드 문자열을 저장할 공간과 유니코드 문자열을 입력받는 코드입니다.

 

char인 거같지만 이 때는 char가 아닌 WCHAR를 이용해서 WCHAR 배열을 통해 유니코드 문자열을 입력받습니다!!

WCHAR은 다음과 같이 wchar_t와 같은 자료형입니다. wchar_t를 typedef 속성을 이용해서 Microsoft에서 기본적으로 선언한 형태로 볼 수 있습니다.

또한 wchar_t는 기존의 1byte형식의 char가 아닌 유니코드 저장을 위해서 2byte형식으로 Microsoft에서 만든 자료형입니다. 보통 유니코드 문자열을 사용하지 않은 경우에는 생소할 수 있지만 유니코드를 저장하는 2byte 자료형으로 생각하시면 됩니다!!

이렇게 유니코드의 경우에는 char가 아닌 wchar_t 즉 WCHAR 배열을 사용하여 저장합니다.

또한 한 가지 유의해야 할 점은 문자열을 입력받거나 출력 할 때 기존의 문자열과 유니코드 문자열을 구분하기 위해 유니코드 문자열의 경우 "[문자열]" 앞에 L을 명시해주는 것을 규칙으로 하고 있습니다.

 

 

2. 출력

출력을 하는 경우 역시 유니코드 문자열을 출력하기 때문에 기존의 출력방법과는 차이가 존재합니다. 하지만 큰 원리의 차이는 없습니다!!

먼저 출력하는 함수는 다음과 같습니다.

 

 

다음과 같이 출력할 때 역시 L를 붙여주며 printf가아닌 유니코드 문자열 출력함수인 wprintf를 사용해서 출력을 진행합니다. 또한 한글 출력시에는

 

다음과 같이 _wsetlocate(LC_ALL,L"korean");을 통해서 한글사용을 명시해 주어야만 한글에 대한 출력이 정상적으로 이루어 질 수 있습니다.

출력 뿐만아니라 입력, 복사 비교 등 strcmp, strcpy등의 기존 함수가 아닌 유니코드 문자열 대상의 함수가 따로존재하며 유니코드 문자열에 관해서는 해당함수들을 사용해야만 합니다.

 

3. tchar.h

tchar.h 헤더파일에 대해서 간단히 설명드리겠습니다. 우리가 위에서 배운바와 같이 유니코드 문자열을 주로 시스템 프로그래밍에서 주로 사용하지만 100% 유니코드 문자열만을 사용하지는 않습니다. 즉 출력을 하더라도 유니코드 문자열과 기존 문자열의 경우 출력방법이 다른데 이를 호환하기 위한 방법이 존재하지 않다면 프로그램을 작동시키는데 매우 큰 불편함이 존재할 것입니다!! ㅠㅠ

 

그래서 존재하는 헤더파일이 다음과 같은 tchar.h 입니다.

tchar.h는 간단히 전처리기 #indef 문을 이용하여 UNICODE 문자열의 사용여부를 체크하고 사용시에는 간단히 예를들면 PRINT = wprintf 아닌 경우에는 PRINT=printf로 하여 개발자는 유니코드 문자열의 사용여부를 신경쓰지 않고 PRINT만을 이용해서 쉽게 코드를 작성할 수 있고 중간에 문자열이 바뀌더라도 수정할 필요가 없는 확장성을 가질 수 있게 해주는 헤더파일 입니다!! 출력 뿐 아니라 다양한 함수에 대해 적용되어있기 때문에 tchar.h를 호출함으로써 편리한 소스코드 작성을 할 수 있습니다.

'OS > Windows' 카테고리의 다른 글

[Windows] Windows PE  (0) 2021.10.31
[Windows] ADS  (2) 2018.07.01
[Widnows] darknet windows 설치  (9) 2018.01.21
[Windows] WS2_32 라이브러리  (2) 2018.01.15

+ Recent posts