如何将TCHAR
数组转换为std::string
(而不是std::basic_string
)?
发布于 2011-06-09 18:40:20
TCHAR类型为char
或wchar_t
,具体取决于您的项目设置。
#ifdef UNICODE
// TCHAR type is wchar_t
#else
// TCHAR type is char
#endif
因此,如果您必须使用std::string
而不是std::wstring
,则应该使用转换器函数。我可以使用wcstombs
或WideCharToMultiByte
。
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
发布于 2011-06-09 18:43:55
TCHAR要么是char,要么是wchar_t,因此
typedef basic_string<TCHAR> tstring;
就是这样做的一种方式。
另一种是完全跳过char
,只使用std::wstring
。
发布于 2015-07-28 05:02:37
我的答案是晚了,我承认,但通过'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!
https://stackoverflow.com/questions/6291458
复制相似问题