簡體   English   中英

將ATL :: CString轉換為std :: vector <unsigned char>

[英]Convert ATL::CString to 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,但如果From =“ 123”,則To = {'1','0','2','0','3'}。

為什么會這樣呢?

您的平台上的TCHAR很有可能是wchar_t ,因此是兩個字節,因此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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM