2014-12-21 2 views
0

다음은 함수입니다.ATL :: CString을 std :: vector로 변환하십시오. <unsigned char>

inline void Str2Data(std::vector<unsigned char> &To, const CString &From) 
{ 
    To.resize(From.GetLength() * sizeof(TCHAR)); 

    if (!From.IsEmpty()) 
     memcpy(&To[0], From.GetString(), To.size()); 
} 

이 OK로 변환하지만, 경우에, "123"= {가입일 = '1', '0', '2', '0', '3'}.

왜 그렇습니까?

+0

'TData'란 무엇입니까? –

+0

std :: vector <부호없는 문자> – veitr

답변

2

플랫폼에 따라 TCHARwchar_t이므로 2 바이트이므로 CString은 실제로 와이드 문자의 컨테이너입니다. 바이트 단위의 복사 대신 변환을 수행하는 것이 좋습니다 :

inline void Str2Data(std::vector<unsigned char> &To, const CString &From) 
{ 
    if (!From.IsEmpty()) { 
     To.resize(From.GetLength()); 
     std::transform(From.GetString(), 
         From.GetString() + From.GetLength(), 
         To.begin(), 
         [](TCHAR c) { return static_cast<unsigned char>(c); }); 
    } 
    else { 
     To.clear(); 
    } 
} 
+0

YAAAAAAAY! 고마워요! – veitr