2009-11-24 3 views
8

Как конфертировать TCHAR[] в char[]?Преобразование массива TCHAR в массив символов

+0

Дубликат: http://stackoverflow.com/questions/159442/what-is-the-simplest-way-to-convert-char-to-from-tchar-in-c-cms – Noldorin

+1

Это будет определенно поможет вам: http: //www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc – Ajay

+1

Я просто меняю Общие -> Набор символов: = "Использовать набор символов Юникода" и теперь он работает (char *) tcharr; – user956584

ответ

2

TCHAR - специфичный для Microsoft тип typedef для char или wchar_t (широкий символ).

Конверсия на шар зависит от того, какой из них он на самом деле. Если TCHAR на самом деле является символом char, тогда вы можете сделать простой актерский состав, но если это действительно wchar_t, вам понадобится программа для преобразования между наборами символов. Смотрите функцию MultiByteToWideChar()

+0

Думаю, нам нужно конвертировать из wchar_t в char, поэтому нам нужен WidecharToMultiByte !! –

1

это зависит от набора символов (Unicode или ANSI) (wchar_t или полукокса), так что если вы используете AnSi просто TCHAR будет символ без литья, но для Юникода вы должны преобразовать из wchar_t на символ, вы можете использовать WideCharToMultiByte

8

Честно говоря, я не знаю, как сделать это с массивами, но с указателями, Microsoft предоставляет нам некоторые API, такие как wctomb и wcstombs. Первый из них менее безопасен, чем второй. Поэтому я думаю, что вы можете делать то, что вы хотите достичь, с помощью одного указателя на массив и одного указателя-указателя на массив;

// ... your includes 
#include <stdlib.h> 
// ... your defines 
#define MAX_LEN 100 
// ... your codes 
// I assume there is no any defined TCHAR array to be converted so far, so I'll create one 
TCHAR c_wText[MAX_LEN] = _T("Hello world!"); 
// Now defining the char pointer to be a buffer for wcstomb/wcstombs 
char c_szText[MAX_LEN]; 
wcstombs(c_szText, c_wText, wcslen(c_wText) + 1); 
// ... and you're free to use your char array, c_szText 

PS: Не может быть лучшим решением, но, по крайней мере, оно работает и функционирует.

0

Почему бы не просто использовать wcstombs_s?

Вот код, показывающий, насколько он прост.

#define MAX_LENGHT 500 
... 

TCHAR szWideString[MAX_LENGHT]; 
char szString[MAX_LENGHT]; 
size_t nNumCharConverted; 
wcstombs_s(&nNumCharConverted, szString, MAX_LENGHT, 
     szWideString, MAX_LENGHT); 

 Смежные вопросы

  • Нет связанных вопросов^_^