- HOME
- Post in | and so on/문자열
- Post at | 2012. 10. 31. 14:47 | by 밀크빵.
- View comment
wchar -> char -> String
- wchar -> char로 문자열을 변환 하려고 하는데,
인터넷에서 찾은 함수는 메모리 할당하고 해제 해주지 않고
그 메모리를 포인터로 넘겨줘서 메모리 사용에 좋지 못할 것 같아서 수정하였다. - 함수 WCharToChar, ToUTF8Str 두개 사용
- 메모리를 할당 받아서 WCharToChar 함수로 포인터 넘겨줌
// wchar -> char void WCharToChar(const wchar_t* pwstrSrc, char * pstr) { setlocale(LC_ALL, "korean"); assert(pwstrSrc); #if !defined _DEBUG int len = 0; len = (wcslen(pwstrSrc) + 1)*2; char* pstr = (char*) malloc ( sizeof( char) * len); WideCharToMultiByte( 949, 0, pwstrSrc, -1, pstr, len, NULL, NULL); #else int nLen = wcslen(pwstrSrc); int count = 0; count = wcstombs(pstr, pwstrSrc, nLen+1); // 여기서 와이드에서 멀티 바이트로 변환 #endif } |
std::string ToUTF8Str(const WCHAR *S, const int NumChars) { std::string Result = ""; int BufferLen = NumChars + 1; char* pstr = (char*) malloc ( sizeof( char) * BufferLen + 1); WCharToChar(S, pstr); // 여기서 호출 해서 Result.assign(pstr); // String 으로 변환 해준 후 free(pstr); // 메모리 해제 return Result; } |
만약 wcstombs() 사용하는데 뒤에 부분이 잘린다면
pstr의 크기를 2배로 늘려주면 됨
버퍼 크기 문제였음ㅜㅜ
문자열 짜잉나 !!
'and so on > 문자열' 카테고리의 다른 글
UTF-8, UNICODE, ANSI - 인코딩에 대하여 (0) | 2012.12.18 |
---|---|
멀티/유니->utf8, utf8->멀티/유니 (0) | 2012.12.10 |
형변환 주의하기 (0) | 2012.12.10 |
[문자열] 아스키코드, 멀티바이트, 유니코드 (0) | 2012.12.10 |
문자열 처리함수 정리(멀티바이트 -> 유니코드) (0) | 2012.08.06 |