Das scheint eine ziemlich weiche Softballfrage zu sein, aber es fällt mir immer schwer, diese Funktion nachzuschlagen, denn es scheint so viele Variationen bezüglich der Referenzierung von Char und Tchar zu geben.Was ist der einfachste Weg, char [] nach/von tchar [] in C/C++ (ms) zu konvertieren?
Antwort
MultiByteToWideChar aber auch siehe "A few of the gotchas of MultiByteToWideChar".
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()
Sie bringen ein ausgezeichneter Punkt. Obwohl ich in dieser speziellen Situation denke, dass der TChar ein breiter Charakter ist, muss ich die Konvertierung nur durchführen, wenn dies nicht der Fall ist. was ich irgendwie überprüfen muss. – CrashCodes
Es gibt ein paar Antworten in diesem Beitrag als gut, vor allem, wenn Sie für eine Cross-Plattform-Lösung freuen:
Wie kann es Cross-Plattform sein, es gibt keine TCHAR Anyware sonst. Seine Fenster spezifisch. –
sollten wir diese Konvertierungen nicht verwenden, denn wenn wir diese in Rekursion aufrufen, wird der Speicher nicht freigegeben. – Vinay
@Vinay Erstellen Sie eine Hilfsfunktion, die eine dieser Funktionen aufruft und das Ergebnis in den Zwischenspeicher oder in einen anderen Puffer kopiert. Sobald die Hilfsfunktion zurückkehrt, wird der Stapelspeicher freigegeben. – bdonlan
Obwohl in dieser besonderen Situation denke ich, die Tchar ein Breitzeichen brauchen Ich werde nur die Konvertierung zu tun, wenn es nicht ist. was ich irgendwie überprüfen muss.
if (sizeof(TCHAR) != sizeof(wchar_t))
{ .... }
Die kühle Sache über das heißt beide Größen der equals Konstanten sind, was bedeutet, dass der Compiler behandelt (und entfernen) der if(), und wenn sie gleich sind, entfernen Sie alles in Die Klammern
können wir auch durchführen mit #ifdef _UNICODE {...} #else {....} #endif – Abhineet
Hier ist der CPP-Code, der _TCHAR * argv [] nach char * argn [] dupliziert.
Wenn Sie alten Code auf Windows, einfache Verwendung Annahme define im Code als optional erwähnt.
defekten Link (deshalb ist es besser, das Beispiel zu zitieren) –
Ich weiß, dass dies ein alter Thread ist, aber er hat mir nicht die "richtige" Antwort gebracht, also füge ich ihn jetzt hinzu.
Die Art, wie dies jetzt aussieht, ist die Verwendung des TEXT-Makros. Das Beispiel für FindFirstFile bei msdn weist darauf hin. http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx
Der Text-Makro wird nur mit String-Literalen arbeiten .. . – jswolf19
Sie können in Ihrem Code setzen Zustand
ifdef _UNICODE
else {// LIKE TCHAR DO WIDE CHAR} {// Kochst TCHAR CHAR}
Was passiert, wenn TCHAR CHAR ist? –
Ich habe die Frage gelesen, dass eine Konvertierung notwendig ist, aber Punkt gemacht. – jeffm