한글 std::string to std::wstring
헤더 파일
// Util.h
#pragma once
#include <string>
namespace Util
{
#ifdef _UNICODE
std::wstring to_wstring(const std::string& str);
std::string to_string(const std::wstring& str);
#endif
}
소스 파일
// Util.cpp
#include "Util.h"
#ifdef _UNICODE
std::wstring Util::to_wstring(const std::string& str)
{
std::wstring buf;
const int strLength = MultiByteToWideChar(CP_ACP, NULL, str.c_str(), str.size(), nullptr, NULL);
buf.resize(strLength);
MultiByteToWideChar(CP_ACP, NULL, str.c_str(), str.size(), const_cast<TCHAR*>(buf.c_str()), strLength);
return buf;
}
std::string Util::to_string(const std::wstring& str)
{
std::string buf;
const int strLength = WideCharToMultiByte(CP_ACP, NULL, str.c_str(), str.size(), nullptr, NULL, nullptr, nullptr);
buf.resize(strLength);
WideCharToMultiByte(CP_ACP, NULL, str.c_str(), str.size(), const_cast<char*>(buf.c_str()), strLength, nullptr, nullptr);
return buf;
}
#endif
테스트
테스트 환경: ReSharper, Google Test, C++14
테스트 소스
// TestProject/test.cpp
#include "../<Target Project>/Util.h"
#ifdef _DEBUG
#pragma comment(lib, "../x64/Debug/<Target Project>.lib")
#else
#pragma comment(lib, "../x64/Release/<Target Project>.lib")
#endif
namespace Converter
{
TEST(StringConverter, ToWString)
{
EXPECT_EQ(std::wstring(L"HELLO"), Util::to_wstring("HELLO"));
EXPECT_EQ(std::wstring(L"테스트"), Util::to_wstring("테스트"));
EXPECT_EQ(std::wstring(L"테스트 코드입니다"), Util::to_wstring("테스트 코드입니다"));
}
TEST(StringConverter, ToString)
{
EXPECT_EQ(std::string("HELLO"), Util::to_string(L"HELLO"));
EXPECT_EQ(std::string("테스트"), Util::to_string(L"테스트"));
EXPECT_EQ(std::string("테스트 코드입니다"), Util::to_string(L"테스트 코드입니다"));
}
TEST(StringConverter, LongStringConvertToWString)
{
EXPECT_EQ(std::wstring(L"테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123"),
Util::to_wstring("테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123"));
}
TEST(StringConverter, LongStringConvertToString)
{
EXPECT_EQ( std::string("테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123"),
Util::to_string(L"테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123\n\
테스트123테스트123테스트123"));
}
TEST(StringConverter, SpecialCharacterToString)
{
EXPECT_EQ(std::string("!@#$%^&*()[]-=+_,./*~`"), Util::to_string(L"!@#$%^&*()[]-=+_,./*~`"));
}
TEST(StringConverter, SpecialCharacterToWString)
{
EXPECT_EQ(std::wstring(L"!@#$%^&*()[]-=+_,./*~`"), Util::to_wstring("!@#$%^&*()[]-=+_,./*~`"));
}
TEST(StringConverter, EmptySpaceToString)
{
EXPECT_EQ(std::string(" "), Util::to_string(L" "));
EXPECT_EQ(std::string("\n"), Util::to_string(L"\n"));
}
TEST(StringConverter, EmptySpaceToWString)
{
EXPECT_EQ(std::wstring(L" "), Util::to_wstring(" "));
EXPECT_EQ(std::wstring(L"\n"), Util::to_wstring("\n"));
}
TEST(StringConverter, NumericToString)
{
EXPECT_EQ(std::string("0123456789"), Util::to_string(L"0123456789"));
}
TEST(StringConverter, NumericToWString)
{
EXPECT_EQ(std::wstring(L"0123456789"), Util::to_wstring("0123456789"));
}
}
테스트 결과
'C++ > MFC' 카테고리의 다른 글
MFC Dialog 로드 이벤트 (0) | 2021.01.25 |
---|---|
CImage로 이미지 로드하는 다양한 방법 (0) | 2020.09.15 |