首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使TCHAR*兼容char*

使TCHAR*兼容char*
EN

Stack Overflow用户
提问于 2011-02-19 03:32:09
回答 3查看 1.8K关注 0票数 0

因此,我有一个简短的问题:如何让TCHAR* (或wchar_t作为宏)与char*一起工作?

我使用的是unicode字符集。

出现问题的代码是:

代码语言:javascript
复制
 TCHAR* D3DDevTypeToString(D3DDEVTYPE devType) {
   switch (devType) {
      case D3DDEVTYPE_HAL:    
      return TEXT("D3DDEVTYPE_HAL");
      case D3DDEVTYPE_SW:     
      return TEXT("D3DDEVTYPE_SW");
      case D3DDEVTYPE_REF:    
      return TEXT("D3DDEVTYPE_REF");
      default:                
      return TEXT("Unknown devType");
      }
   }

显而易见的解决方案是将TCHAR*更改为char*,但如果可能的话,我希望将其保留为TCHAR*。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-19 03:34:15

,是的,我正在使用unicode字符集。

则无法使TCHAR与char兼容。因为如果你使用的是UCS,那么TCHAR就是wchar_t,类型charwchar_t没有任何关系。你可以做一些工作来转换字符串(例如使用WideCharToMultiByte),但是这样你就会失去对Unicode的支持。

票数 3
EN

Stack Overflow用户

发布于 2011-02-19 03:34:43

TCHAR可以是wchar_tchar,这取决于是否定义了宏UNICODE

  • 如果定义了宏UNICODE,则TCHAR表示wchar_t。在这种情况下,您不能用TCHAR代替char,也不能与它一起使用。它是dangerous!
  • If,没有定义,那么TCHAR就是char。在这种情况下,您可以使用TCHAR来代替char,也可以与之一起使用。毕竟,它们现在是一样的。
票数 1
EN

Stack Overflow用户

发布于 2011-02-19 03:38:20

编写一个从UTF-16到UTF-8的转换器(或者使用win32 API函数(如果是这样做的话))。使其泛型,这样它就可以在char*、wchar_t*、std::string和std::wstring上工作。编写一个模板化函数string_cast,让编译器计算出第二个参数。覆盖您将使用的不同组合的string_cast。使用string_cast在TCHAR*到std::string之间进行转换,然后就不需要考虑如何定义TCHAR了(假设您同时覆盖了char和wchar_t )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5045692

复制
相关文章

相似问题

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