'문자열'에 해당되는 글 1건

  1. 2008.05.23 [Win(CE)] 유니코드/멀티바이트를 지원하기 위한 삽질

Windows 에서 Wide Character 는 UNICODE 를 의미한다.

--------------------------------

매크로
_T("ABC")
TEXT("ABC")

"ABC" 대신 위에 것들을 쓰자.
UNICODE로 컴파일하면 UNICODE문자열로, ASCII로 컴파일하면 ASCII 문자열로 인식한다.

--------------------------------

windows (ce포함)용 c/c++의 string 처리에서 알아두면 좋은 거.

문자열의 길이를 재는 함수라면?
strlen() : ASCII용 문자열 길이 쟤는 함수
wcslen() : UNICODE용 문자열 길이 쟤는 함수
_tcslen() : 환경에 맞추어지는 매크로

뭐 일단 _mcslen() 도 있긴하다. (MB환경에서 strlen을 호출하면 이쪽으로 연결할걸?)

다른 함수들도 마찬가지다.

strXXXX() 함수들이 wcsXXXX()로, tcsXXXX() 로 바꾸어 쓰면 된다.

strtol : ASCII 문자열에서 long 값으로 변환 (atoi와 비슷하지만 진수 지정 가능)
wcstol : UNICODE ~~~
_tcstol : 환경 ~~~

-------------------------------

그럼 다 지원하려면 가장 깔끔한 방법은?
tcsXXXX() 시리즈를, char 대신 매크로 TCHAR 쓰는거.

물론 덕분에 골치아픈 문제도 가끔 발생한다는거..

-------------------------------

WideCharToMultiByte() : UNICODE -> ASCII

MultiByteToWideChar() : ASCII -> UNICODE

--------------------------------

char : ASCII
wchar_t : UNICODE
TCHAR : 환경 따라가는 매크로

--------------------------------

CString은 내용이 wchar일 수 도, char일 수 도 있음에 유의할 것.

--------------------------------

eVC++ 이나 SmartDevice(WinCE)용으로 사용하는 Visual Studio 시리즈는 기본설정이 UNICODE 환경으로 되어있다.
ASCII를 쓰고 싶다면 컴파일설정 (프로젝트 속성?) 을 바꾸어 주어야한다.

--------------------------------

아... Windows Embedded CE 6.0 부터는 기존 문자열 함수들에 문제가 있을 수 있다고 해서...
safe 시리즈를 선보였다. 젠장.

예를들어 strcpy 라면 strcpy_s 이런식이었던 듯...
대충 봤을 때 문자열 종료 문자 '\0'가 문제가 있다고 파악한 모양이다.

Posted by freezn