Windows Programming

유니코드 <-> 멀티바이트 변환 편리하게 하기

오즈마스터 2007. 11. 26. 21:59

USES_CONVERSION;
W2A : 유니코드 -> 멀티바이트
A2W : 멀티바이트 -> 유니코드

이상은 ATL 3.0 에 포함된 기능.
(따로 헤더를 인클루드 해야 하는지 알 수 없다. 그냥 됐으니까 ㅡ_ㅡ;)
그리고 Visual Studio 6 에서 사용 가능한지 테스트 안 해 봤음. 될거라 생각됨)

(수정: atlconv.h 인클루드 하면 된다고 함)

그리고 반드시, USES_CONVERSION 라는 매크로를 선언해야 한다. 컨버팅에 필요한 임시변수들이 선언되어 있다.




매크로 선언할 필요 없이 바로 쓰는것도 있다.
이것은 ATL 7.0 의 기능이다. (Visual Studio .Net 이후 버전부터 사용 가능)

CA2W(멀티바이트문자열); // A2W 와 같은 기능
CW2A(유니코드문자열); // W2A 와 같은 기능
예제)
char sz[] = "12345678901234567890123456789012345678901234567890";
TRACE(_T("%s"), CA2W(sz));

그러나, 내부 버퍼가 128 바이트밖에 되질 않기 때문에 그 이상의 문자열을 변환하고자 한다면
명시적으로 길이를 줘야 한다. (128바이트 이상 변환해도 죽지 않는다면, 단지 운이 좋은 것뿐이다. 항상 운이 좋을 수 없기에 나중에 골치 아파 질 수 있다.)

CA2WEX<길이>(멀티바이트문자열);
CW2AEX<길이>(유니코드문자열);
예제)
 char sz[] = "12345678901234567890123456789012345678901234567890"
  "12345678901234567890123456789012345678901234567890"
  "12345678901234567890123456789012345678901234567890"
  "12345678901234567890123456789012345678901234567890"; // 200 바이트
 TRACE(_T("%s"), CA2WEX<1024>(sz));