簡體   English   中英

如何將 TCHAR 數組轉換為 std::string?

[英]How to convert a TCHAR array to std::string?

如何將TCHAR數組轉換為std::string (而不是std::basic_string )?

TCHAR只是一個 typedef,根據您的編譯配置,默認為charwchar_t

標准模板庫支持 ASCII(使用std::string )和寬字符集(使用std::wstring )。 您需要做的就是根據您的編譯配置將String類型定義為 std::string 或 std::wstring 。 為了保持靈活性,您可以使用以下代碼:

#ifndef UNICODE  
  typedef std::string String; 
#else
  typedef std::wstring String; 
#endif

現在您可以在代碼中使用String並讓編譯器處理討厭的部分。 String 現在將具有構造函數,可讓您將TCHAR轉換為std::stringstd::wstring

我的回答遲到了,我承認,但是通過“Alok Save”的回答和一些研究,我找到了一個好方法:(注意,我沒有對這個版本進行很多測試,所以它可能無法正常工作每個案例:但從我測試的結果來看,它應該):

TCHAR t = SomeFunctionReturningTCHAR();
std::string str;

#ifndef UNICODE
    str = t;
#else
    std::wstring wStr = t;
    str = std::string(wStr.begin(), wStr.end());
#endif

std::cout << str << std::endl; //<-- should work!

TCHAR 類型是charwchar_t ,具體取決於您的項目設置。

 #ifdef UNICODE
     // TCHAR type is wchar_t
 #else
     // TCHAR type is char
 #endif

所以如果你必須使用std::string而不是std::wstring ,你應該使用轉換器 function。 我可以使用wcstombsWideCharToMultiByte

TCHAR * text;

#ifdef UNICODE
    /*/
    // Simple C
    const size_t size = ( wcslen(text) + 1 ) * sizeof(wchar_t);
    wcstombs(&buffer[0], text, size);
    std::vector<char> buffer(size);
    /*/
    // Windows API (I would use this)
    std::vector<char> buffer;
    int size = WideCharToMultiByte(CP_UTF8, 0, text, -1, NULL, 0, NULL, NULL);
    if (size > 0) {
        buffer.resize(size);
        WideCharToMultiByte(CP_UTF8, 0, text, -1, static_cast<BYTE*>(&buffer[0]), buffer.size(), NULL, NULL);
    }
    else {
        // Error handling
    }
    //*/
    std::string string(&buffer[0]);
#else
    std::string string(text);
#endif

TCHAR 是 char 或 wchar_t,所以

typedef basic_string<TCHAR>   tstring;

是一種方法。

另一種是完全跳過char而只使用std::wstring

簡單的!

std::string tcharToChar(TCHAR* buffer)
{
    char *charBuffer = NULL;
    std::string returnValue;
    int lengthOfbuffer = lstrlenW(buffer);
    if(buffer!=NULL)
    {
        charBuffer = (char*)calloc(lengthOfbuffer+1,sizeof(char));
    }
    else
    {
        return NULL;
    }

    for (int index = 0;
        index < lengthOfbuffer;
        index++)
    {
        char *singleCharacter = (char*)calloc(2,sizeof(char));
        singleCharacter[0] = (char)buffer[index];
        singleCharacter[1] = '\0';
        strcat(charBuffer, singleCharacter);
        free(singleCharacter );
    }
    strcat(charBuffer, "\0");
    returnValue.append(charBuffer);
    free(charBuffer);
    return returnValue;
    
}

快速而骯臟的解決方案:

TCHAR str[256] = {};

// put something in str...


// convert to string
std::string strtmp(&str[0], &str[255]);

std::cout << strtmp << std::endl;

暫無
暫無

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

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