嗨,我需要在我的项目中concat我的对话框的名称(类型wchar_t)和配置的名称(类型TCHAR)。 我该怎么做? 谢谢。concat一个wchar_t和TCHAR
1
A
回答
4
这取决于,一个TCHAR是醚char
或wchar_t
取决于您是否将您的应用程序构建为Unicode。如果你建立你的应用程序为Unicode,你可以简单地做:
wcscat_s(dest, extra);
如果不建立自己的应用程序为Unicode,你需要或者转换成TCHAR串:S(它是那么的char
字符串:■ )转换为一个字符串wchar_t
:s或您的字符串wchar_t
:s转换为字符串char
:s。要做到这一点,你应该看看MultiByteToWideChar或WideCharToMultiByte函数。这两个参数看起来都有些吓人,并且需要很多参数,所以我通常会使用一些帮助程序(请注意,为了清楚起见,正确的错误处理已被删除,一个正确的解决方案也会在一个循环中调用上述函数,缓冲如果调用失败,ERROR_INSUFFICIENT_BUFFER
):
std::wstring multiByteToWideChar(const std::string &s)
{
std::vector<wchar_t> buf(s.length() * 2);
MultiByteToWideChar(CP_ACP,
MB_PRECOMPOSED,
s.c_str(),
s.length(),
&buf[0],
buf.size());
return std::wstring(&buf[0]);
}
std::string wideCharToMultiByte(const std::wstring &s)
{
std::vector<char> buf(s.length() * 2);
BOOL usedDefault = FALSE;
WideCharToMultiByte(CP_ACP,
WC_COMPOSITECHECK | WC_DEFAULTCHAR,
s.c_str(),
s.length(),
&buf[0],
buf.size(),
"?",
&usedDefault);
return std::string(&buf[0]);
}
除了这些我设置了一个类型的特征类,所以我可以编译我的项目为Unicode与否并不关心:
template <class CharT>
struct string_converter_t;
template <>
struct string_converter_t<char>
{
static std::wstring toUnicode(const std::string &s)
{
return multiByteToWideChar(s);
}
static std::string toAscii(const std::string &s)
{
return s;
}
static std::string fromUnicode(const std::wstring &s)
{
return wideCharToMultiByte(s);
}
static std::string fromAscii(const std::string &s)
{
return s;
}
};
而一个wchar_t
(我作为excerise离开)几乎完全相同。在你的情况下,你可以简单地做:
std::wstring result = dialog_name + string_converter_t<TCHAR>::toUnicode(config_name);
2
你的意思是TCHAR *?因为以单个字符作为名字会有点奇怪。无论如何:只要将TCHAR转换为wchar_t - TCHAR既可以是char也可以是wchar_t,无论哪种方式都可以保存为wchar_t。
0
相关问题
- 1. C++如何将wchar_t *转换为TCHAR [](不是TCHAR *)
- 2. Concat wchar_t C中的Unicode字符串?
- 3. 使用TCHAR的错误,无法转换为wchar_t
- 4. 的Qt不能转换“常量为wchar_t *”到“TCHAR *”
- 5. 区分TCHAR和_TCHAR
- 6. wchar_t和POSIX库
- 7. char,wchar_t和unichar
- 8. 通过==比较CString和TCHAR?
- 9. 比较TCHAR []和的char []
- 10. BytesOf()和wchar_t数组
- 11. 与TCHAR一起使用itoa
- 12. 以一个char字符串转换为TCHAR的窗口上的炭和TCHAR之间的转换用Perl
- 13. Oracle concat一个动态值
- 14. 如何访问wchar_t *的wchar_t?
- 15. 升压::格式和wchar_t的
- 16. swig,python和wchar_t问题
- 17. 无法将wchar_t的内容复制到另一个w mall_d的wchar_t var中?
- 18. C++ TCHAR []串
- 19. TCHAR *为char *
- 20. 由TCHAR键名
- 21. System :: String^to TCHAR *
- 22. C - 拆分TCHAR
- 23. Nokogiri和concat()
- 24. XPages和EL concat
- 25. SQL Concat和intvalue
- 26. CoffeeScript和sbt-concat
- 27. Concat和加入
- 28. CONCAT和SQL
- 29. MySQL group_concat和concat
- 30. 这个php/mysql代码是什么意思。 CONCAT,喜欢和CONCAT
当然,任何建立在过去十年的应用程序可能应该建立为Unicode,所以这是一个非常简单的任务。 :-) – 2011-12-21 09:56:28
谢谢,我用wcscat_s(dest,extra);它的工作原理TCHAR是一个wchar,我用unicode建立我的项目:) – nidhal 2011-12-21 09:56:36
@CodyGray:是的,但只是让你的代码UTF-16是不够的,如果你想确保它始终工作。 UTF-16中的代码点实际上可以跨越多个“wchar_t”,这是少数人考虑的因素(包括我在内)。 – 2011-12-22 11:22:52