【问题标题】:What is the simplest way to convert char[] to/from tchar[] in C/C++(ms)?在 C/C++(ms) 中将 char[] 转换为 tchar[] 的最简单方法是什么?
【发布时间】:2010-09-14 15:19:22
【问题描述】:

这似乎是一个漂亮的垒球问题,但我总是很难找到这个函数,因为关于 char 和 tchar 的引用似乎有很多变化。

【问题讨论】:

    标签: c++ c string char tchar


    【解决方案1】:

    最简单的方法是使用转换宏:

    • CW2A
    • CA2W
    • 等等...

    MSDN

    【讨论】:

    • 我们不应该使用这些转换,因为如果我们递归调用它们,它不会释放内存
    • @Vinay 创建一个调用其中之一的辅助函数,然后将结果复制到堆或另一个缓冲区中。一旦辅助函数返回,堆栈内存就会被释放。
    【解决方案2】:

    【讨论】:

    • 如果 TCHAR 是 CHAR 会发生什么?
    • 我读到的问题是规定转换是必要的,但重点是。
    【解决方案3】:

    TCHAR 是 char 或 wchar_t(宽字符)的 Microsoft 特定类型定义。

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

    【讨论】:

    • 你提出了一个很好的观点。虽然在这种特殊情况下,我认为 TChar 是一个宽字符,但如果不是,我只需要进行转换。我得检查一下。
    【解决方案4】:

    这篇文章中也有一些答案,特别是如果您正在寻找跨平台解决方案:

    UTF8 to/from wide char conversion in STL

    【讨论】:

    • 怎么可能跨平台没有TCHAR 其他的。它的窗口特定。
    【解决方案5】:

    虽然在这种特殊情况下,我认为 TChar 是一个宽字符,但如果不是,我只需要进行转换。我得检查一下。

    if (sizeof(TCHAR) != sizeof(wchar_t))
    {  .... }
    

    这很酷的一点是等于的大小都是常量,这意味着编译器将处理(并删除)if(),如果它们相等,则删除大括号内的所有内容

    【讨论】:

      【解决方案6】:

      这是将 _TCHAR * argv[] 复制到 char * argn[] 的 CPP 代码。

      http://www.wincli.com/?p=72

      如果你在 Windows 上采用旧代码,简单地使用代码中提到的定义作为可选。

      【讨论】:

      • 链接断开(这就是为什么最好引用示例:)
      【解决方案7】:

      您可以在代码中添加条件

      ifdef _UNICODE

      { //DO LIKE TCHAR IS WIDE CHAR } ELSE { //DO LIKE TCHAR IS CHAR }

      【讨论】:

        【解决方案8】:

        我意识到这是一个旧线程,但它没有给我“正确”的答案,所以现在添加它。

        现在看来这样做的方法是使用 TEXT 宏。 msdn 上的 FindFirstFile 示例指出了这一点。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx

        【讨论】:

          猜你喜欢
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-23
          • 1970-01-01
          • 1970-01-01
          • 2013-10-18
          • 1970-01-01
          • 2015-05-15
          相关资源
          最近更新 更多