2009-11-24 10 views
8

Wie zu TCHAR[] zu char[] konvertieren?TCHAR-Array in Char-Array konvertieren

+0

Duplizieren: http://stackoverflow.com/questions/159442/what-is-the-simplest-way-to-convert-char-to-from-tchar-in-c-cms – Noldorin

+1

Dieser Wille definitiv helfen Ihnen: http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc – Ajay

+1

Ich ändere einfach General -> Character Set: = "Unioncode-Zeichensatz verwenden" und es funktioniert jetzt (char *) tcharr; – user956584

Antwort

2

TCHAR ist eine Microsoft-spezifische typedef für char oder wchar_t (ein breites Zeichen).

Umwandlung in Char hängt davon ab, welche dieser tatsächlich ist. Wenn TCHAR tatsächlich ein Zeichen ist, können Sie eine einfache Umwandlung durchführen, aber wenn es wirklich ein wchar_t ist, benötigen Sie eine Routine, um zwischen Zeichensätzen zu konvertieren. Siehe die Funktion MultiByteToWideChar()

+0

Ich denke, wir müssen von wchar_t in char konvertieren, so dass wir WidecharToMultiByte brauchen !! –

1

es auf dem Zeichensatz hängt (Unicode oder ANSI) (wchar_t oder char), also, wenn Ihr ansi einfach TCHAR verwenden, werden ohne Casting char sein, aber für Unicode müssen Sie konvertieren von wchar_t verkohlen, Sie WideCharToMultiByte

8

Ehrlich verwenden kann, weiß ich nicht, wie es mit Arrays zu tun, sondern mit Zeigern, bietet Microsoft uns einige APIs, wie wctomb und wcstombs. Der erste ist weniger sicher als der zweite. Also ich denke, dass Sie tun können, was Sie mit einem Array-to-Pointer und einem Pointer-zu-Array-Casting erreichen möchten;

PS: Könnte nicht die beste Lösung sein, aber zumindest funktioniert es und funktional.

0

Warum nicht einfach wcstombs_s verwenden?

Hier ist der Code um zu zeigen, wie einfach es ist.

#define MAX_LENGHT 500 
... 

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