C++ 将字符串转换为cpp中的_T
我想将C++ 将字符串转换为cpp中的_T,c++,windows,C++,Windows,我想将string或char*转换为\u T,但无法执行此操作 如果我写 _tcscpy(cmdline,_T ("hello world")); char* msg="hello world"; _tcscpy(cmdline,_T (msg)); 它工作得很好,但如果我写 _tcscpy(cmdline,_T ("hello world")); char* msg="hello world"; _tcscpy(cmdline,_T (msg)); 它显示一个错误,如:error
string
或char*
转换为\u T
,但无法执行此操作
如果我写
_tcscpy(cmdline,_T ("hello world"));
char* msg="hello world";
_tcscpy(cmdline,_T (msg));
它工作得很好,但如果我写
_tcscpy(cmdline,_T ("hello world"));
char* msg="hello world";
_tcscpy(cmdline,_T (msg));
它显示一个错误,如:error C2065:'Lmsg':未声明的标识符
请给我一个解决办法
Thanx提前。
\u T
仅适用于字符串文本。如果代码是使用Unicode支持编译的,那么它所做的就是将文本转换为L”“
字符串,否则就不使用它
查看一下您需要使用的函数
您还应该查看。
\u T
是一个宏,定义为(如果定义了UNICODE
):
它只能用于字符串文本。因此,当您编写\u T(“hi”)
时,它会变成L“hi”
,这是有效的,正如预期的那样。但是,当您编写\u T(msg)
时,它会变成Lmsg
,这是一个未定义的标识符,而您并不是有意这样做的
您所需要的只是以下功能:
\u T
是一个宏,它通过在UNICODE
中的文本前加一个L
,将字符串文本转换为宽字符字符串文本
换句话说,当您编写\T(“Hello”)
时,就好像您在ANSI版本上编写了“Hello”
,或者在UNICODE版本上编写了L“Hello”
。结果表达式的类型分别为char*
或wchar\u t*
\T
无法将字符串变量(std::string
或char*
)转换为wchar\T*
——为此,必须使用类似或的函数
建议:总是进行UNICODE构建,忘记
\u T
、TCHAR
和所有其他T
-衍生产品,对您来说会容易得多(而且绝不会更糟)。只要到处使用宽字符串。\u T
不是实际类型。它是一个宏,在字符串文本前面加上L
,使它们成为wchar\u t*
s,而不是char*
。例如,如果需要在运行时将char*
字符串转换为wchar\u t*
字符串,则需要使用修饰符只是一个声明,告诉编译器必须将字符串文本解释为utf-16编码。它对变量不起作用的原因是该变量的内容已经声明为ascii
如前所述,该函数是将字符数据转换为utf-16(宽字符)数据所需的函数。使用const
char*msg
;字符串文字是只读的。或者使用const wchar\u t*msg=L“hello world”代码>问题消失了+1为Bo Persson的解决方案。只需使用100%Unicode即可。它支持所有语言,包括英语。英语版本使用ASCII,其他版本使用Unicode,节省了1字节,这真的不值得你这么头疼。+1,这些函数不推荐使用。而是使用这个链接:是的,当然。但那会把手术弄糊涂的。我尽量保持简单。