Tuesday, April 5, 2011

NSString 을 std::wstring 으로 변환 및 버그 수정

MindHD 는 마인드맵 관련 엔진이 C++로 작성되어 iOS에서 구동될 경우 스트링 변환이 필수적이었다. 따라서, NSString을 wstring으로 변환하는 과정이 필요하다. void NSStringToString(const NSString* text, String& str){         str = L"";         size_t len = [text length];         if(len <= 0){                 return;         }                  if([text canBeConvertedToEncoding:NSUTF32LittleEndianStringEncoding]){                 str = (wchar_t*)[text cStringUsingEncoding:NSUTF32LittleEndianStringEncoding];         } } NSUTF32LittleEndianStringEncoding 사용하여 변환이 가능한데, 위 코드에 버그가 있었다. 리턴값이 char* 인데 wchar_t*로 변경하니 널 문자 삽입이 제대로 되지 않는 경우가 발생한 것이다. str = wstring((wchar_t*)[text cStringUsingEncoding:NSUTF32LittleEndianStringEncoding], len); 명시적으로 스트링 길이를 주어 해결함.

No comments:

Post a Comment