首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将TCHAR数组转换为std::string?

如何将TCHAR数组转换为std::string?
EN

Stack Overflow用户
提问于 2011-06-09 18:34:58
回答 5查看 73.5K关注 0票数 32

如何将TCHAR数组转换为std::string (而不是std::basic_string)?

EN

回答 5

Stack Overflow用户

发布于 2011-06-09 18:40:20

TCHAR类型为charwchar_t,具体取决于您的项目设置。

代码语言:javascript
运行
复制
 #ifdef UNICODE
     // TCHAR type is wchar_t
 #else
     // TCHAR type is char
 #endif

因此,如果您必须使用std::string而不是std::wstring,则应该使用转换器函数。我可以使用wcstombsWideCharToMultiByte

代码语言:javascript
运行
复制
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
票数 5
EN

Stack Overflow用户

发布于 2011-06-09 18:43:55

TCHAR要么是char,要么是wchar_t,因此

代码语言:javascript
运行
复制
typedef basic_string<TCHAR>   tstring;

就是这样做的一种方式。

另一种是完全跳过char,只使用std::wstring

票数 5
EN

Stack Overflow用户

发布于 2015-07-28 05:02:37

我的答案是晚了,我承认,但通过'Alok Save‘的答案和一些研究,我找到了一个好方法!(注意:我没有测试过这个版本,所以它可能不是在所有情况下都能工作,但从我测试的情况来看,它应该是有效的):

代码语言:javascript
运行
复制
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!
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6291458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档