18

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

4

8 回答 8

10

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

  • CW2A
  • CA2W
  • ETC...

MSDN

于 2008-10-01T20:22:38.173 回答
7

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

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

于 2008-10-01T20:03:52.493 回答
7

MultiByteToWideChar,但也请参阅“MultiByteToWideChar 的一些问题”

于 2008-10-01T20:05:22.943 回答
3

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

UTF8 到/从 STL 中的宽字符转换

于 2008-10-01T20:09:49.063 回答
3

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

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

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

于 2008-10-01T20:25:09.620 回答
2

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

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

如果您在 Windows 上采用旧代码,只需使用代码中提到的定义作为可选。

于 2010-10-27T03:32:22.977 回答
1

您可以在代码中添加条件

ifdef _UNICODE

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

于 2016-05-31T08:28:48.240 回答
0

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

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

于 2012-01-26T17:41:29.670 回答