【问题标题】:Convert TCHAR array to char array将 TCHAR 数组转换为 char 数组
【发布时间】:2010-12-19 20:12:17
【问题描述】:

如何将TCHAR[]转换为char[]

【问题讨论】:

标签: character-encoding visual-c++ tchar


【解决方案1】:

TCHAR 是 Microsoft 特定的 typedef,用于 charwchar_t(宽字符)。

转换为 char 取决于它实际上是哪一个。如果 TCHAR 实际上是 char,那么您可以进行简单的转换,但如果它确实是 wchar_t,您将需要一个例程来在字符集之间进行转换。见函数MultiByteToWideChar()

【讨论】:

  • 我认为我们需要从 wchar_t 转换为 char 所以我们需要 WidecharToMultiByte!!
【解决方案2】:

这取决于字符集(Unicode 或 ANSI)(wchar_t 或 char),所以如果你使用 ANSI,TCHAR 将是 char 没有任何转换,但对于 Unicode,你必须从 wchar_t 转换为 char,你可以使用WideCharToMultiByte

【讨论】:

    【解决方案3】:

    老实说,我不知道如何使用数组但使用指针,Microsoft 为我们提供了一些 API,例如 wctombwcstombs。第一个不如第二个安全。所以我认为你可以用一个数组到指针和一个指针到数组的转换来做你想做的事情;

    // ... your includes
    #include <stdlib.h>
    // ... your defines
    #define MAX_LEN 100
    // ... your codes
    // I assume there is no any defined TCHAR array to be converted so far, so I'll create one
    TCHAR c_wText[MAX_LEN] = _T("Hello world!");
    // Now defining the char pointer to be a buffer for wcstomb/wcstombs
    char c_szText[MAX_LEN];
    wcstombs(c_szText, c_wText, wcslen(c_wText) + 1);
    // ... and you're free to use your char array, c_szText
    

    PS:不是最好的解决方案,但至少它可以正常工作。

    【讨论】:

      【解决方案4】:

      为什么不直接使用wcstombs_s

      这里的代码显示它是多么简单。

      #define MAX_LENGTH 500
      ...
      
      TCHAR szWideString[MAX_LENGTH];
      char szString[MAX_LENGTH];
      size_t nNumCharConverted;
      wcstombs_s(&nNumCharConverted, szString, MAX_LENGTH,
              szWideString, MAX_LENGTH);
      

      【讨论】:

      • 你拼错了“LENGTH”。
      • LENGHT 是常量而不是关键字。
      • 完成,我修正了 LENGTH 拼写。
      猜你喜欢
      • 2011-06-08
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2016-03-10
      • 2011-09-11
      • 2016-04-07
      • 2011-11-09
      相关资源
      最近更新 更多