如何为char *转换成TCHAR []? [重复](How to convert char*

2019-09-01 18:49发布

这个问题已经在这里有一个答案:

  • 转换的char TCHAR * argv的[] 2个回答
char*  stheParameterFileName = argv[1]; //I'm passing the file name as  a parameter.
TCHAR szName [512];

我怎么能转换char*TCHAR []

Answer 1:

如果包含头文件:

#include "atlstr.h"

然后你可以使用A2T宏如下:

// You'd need this line if using earlier versions of ATL/Visual Studio
// USES_CONVERSION;

char*  stheParameterFileName = argv[1];
TCHAR szName [512];
_tcscpy(szName, A2T(stheParameterFileName));
MessageBox(NULL, szName, szName, MB_OK);

MSDN上详细



Answer 2:

形成MSDN :

// convert_from_char.cpp
// compile with: /clr /link comsuppw.lib

#include <iostream>
#include <stdlib.h>
#include <string>

#include "atlbase.h"
#include "atlstr.h"
#include "comutil.h"

using namespace std;
using namespace System;

int main()
{    
// Create and display a C style string, and then use it 
// to create different kinds of strings.
char *orig = "Hello, World!";
cout << orig << " (char *)" << endl;

// newsize describes the length of the 
// wchar_t string called wcstring in terms of the number 
// of wide characters, not the number of bytes.
size_t newsize = strlen(orig) + 1;

// The following creates a buffer large enough to contain 
// the exact number of characters in the original string
// in the new format. If you want to add more characters
// to the end of the string, increase the value of newsize
// to increase the size of the buffer.
wchar_t * wcstring = new wchar_t[newsize];

// Convert char* string to a wchar_t* string.
size_t convertedChars = 0;
mbstowcs_s(&convertedChars, wcstring, newsize, orig, _TRUNCATE);
// Display the result and indicate the type of string that it is.
wcout << wcstring << _T(" (wchar_t *)") << endl;
...
}

经常被定义TCHAR取决于您是否使用Unicode或ANSI。

另请参见这里 :

通过使用TCHAR.H,您可以构建单字节,多字节字符集(MBCS),并从同一来源Unicode应用程序。
TCHAR.H定义宏(其具有前缀_tcs),与正确的预处理器定义,地图为str,_mbs,或WCS功能,根据。 要建立MBCS,定义符号_MBCS。 要建立统一,定义符号_UNICODE。 构建一个单字节应用,既不定义(缺省值)。
默认情况下,_MBCS为MFC应用程序定义。 所述_TCHAR数据类型在TCHAR.H有条件地限定。 如果符号_UNICODE为您的构建定义, _TCHAR被定义为wchar_t; 否则,对于单字节和MBCS构建,它被定义为炭。 (wchar_t的,基本的Unicode宽字符数据类型,是16位对应于一个8位符号字符)。对于国际应用程序,使用_tcs家族的功能,这在_TCHAR单元,而不是字节进行操作。 例如,_tcsncpy复制n _TCHARs,不是n字节。



Answer 3:

您的项目可能被设置为使用Unicode。 Unicode是希望处理大多数语言地球上的程序。 如果你不需要这些,去从Unicode项目属性/常规/字符集,并切换到多字节。



文章来源: How to convert char* to TCHAR[ ]? [duplicate]