Как конвертировать char* в TCHAR[ ]?

char*  stheParameterFileName = argv[1]; //I'm passing the file name as  a parameter.
TCHAR szName [512];

Как я могу конвертировать char* в TCHAR []?

3 ответа

Решение

Если вы включите заголовочный файл:

#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

Ваш проект может быть настроен на использование Unicode. Unicode для программ, которые хотят работать с большинством языков на планете Земля. Если вам это не нужно, перейдите в свойства проекта / общие / набор символов и переключитесь с Unicode на многобайтовый.

Форма 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, определите символ _UNICODE. Чтобы создать однобайтовое приложение, не определите ни одно (по умолчанию).
По умолчанию _MBCS определяется для приложений MFC. Тип данных _TCHAR определяется условно в Tchar.h. Если символ _UNICODE определяется для вашей сборки, _TCHAR определяется как wchar_t; в противном случае для однобайтовых сборок и сборок MBCS он определяется как char. (wchar_t, базовый широкоформатный тип данных Unicode, является 16-разрядным аналогом 8-разрядного знакового символа.) Для международных приложений используйте семейство функций _tcs, которые работают в блоках _TCHAR, а не в байтах. Например, _tcsncpy копирует n _TCHAR, а не n байтов.

Другие вопросы по тегам