한 걸음씩..

WideChar , Multibyte 변환 시 주의 할점 본문

프로그래밍

WideChar , Multibyte 변환 시 주의 할점

반엘 2013. 8. 8. 14:53
WideChar , Multibyte 이 둘중 하나로 변환해야하는 경우가 있다. 

버퍼를 크게 잡고 버퍼 크기를 절대 넘지 않는 조건이라면 고려할 필요가 없지만

버퍼를 크게 잡아도 상황에 따라 버퍼 크기보다 클수도 있는 경우는 동적으로 할당을 해야하는데 

wcslen , strlen 으로 크기를 알아와도 정확하지 않을 때가 있다. 

특히나 영어가 아닌 한글, 일본어 , 중국어가 포함된 문자열이라면 더욱더 그렇다. 

때문에 그런 경우 wcslen , strlen 이 아닌 다른 함수로 사이즈를 알아와야 한다.

만약 WideChar를  MultiByte로 변환을 해야 한다면 버퍼 크기를 결정해야 한다. 

nlength = WideCharToMultiByte(CP_ACP , 0 , PathString.GetBuffer() , -1, NULL , 0 , NULL, NULL); 

Widechar 버퍼만 주고 MultiByte로 했을때 길이가 몇인지 정확히 알수가 있다.

 pBuf = ( PCHAR )malloc( nlength ); 와 같이 WideCharTomultiByte로 알아온 사이즈로 버퍼를 할당해야 한다. 

WideCharToMultiByte(CP_ACP , 0 , PathString.GetBuffer() , -1 , pBuf ,(int)nlength, NULL, NULL); 

그런 후에 WideChar를 MultiByte로 변경한다. 

다시 한번 설명하지만 예상한 가용 버퍼 크기보다 크게 문자열이 올수도 있는 경우 일때 위와 같은 방법으로 

할당할 버퍼의 크기를 알아온다.

MultiByte -> WideChar로 변활 할때도 위와 같은 형식으로 사용을 하면 된다.