Ich habe eine Zeichenfolge in char*
Format und möchte es in wchar_t*
konvertieren, um zu einer Windows-Funktion zu übergeben.Wie konvertiere ich eine Zeichenkette in eine Zeichenkette wchar_t?
Antwort
Hilft diese kleine Funktion?
#include <cstdlib>
int mbstowcs(wchar_t *out, const char *in, size_t size);
Siehe auch die C++ reference
Wenn Sie nicht gegen die C-Laufzeitbibliothek verknüpfen möchten, verwenden Sie die MultiByteToWideChar API-Aufruf, zB:
const size_t WCHARBUF = 100;
const char s[] = "HELLO";
wchar_t wszDest[WCHARBUF];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSource, -1, wszDest, WCHARBUF);
das Windows SDK gibt zwei Funktionen in kernel32.lib zum Konvertieren von Strings von und in einen breiten Zeichensatz. diese sind MultiByteToWideChar()
und WideCharToMultiByte()
.
Bitte beachten Sie, dass, anders als der Funktionsname vorgeschlagen, die Zeichenfolge nicht unbedingt einen Multi-Byte-Zeichensatz verwendet, sondern eine einfache ANSI-Zeichenfolge sein kann. Beachten Sie, dass diese Funktionen UTF-7 und UTF-8 als Multi-Byte-Zeichensatz verstehen. Der Zeichensatz mit dem breiten Zeichensatz ist immer UTF-16.
schnaader Antwort die Umwandlung von der aktuellen locale C definiert verwenden, verwendet dieses die C++ locale-Schnittstelle (der sagte, dass es war einfach?)
std::wstring widen(std::string const& s, std::locale loc)
{
std::char_traits<wchar_t>::state_type state = { 0 };
typedef std::codecvt<wchar_t, char, std::char_traits<wchar_t>::state_type >
ConverterFacet;
ConverterFacet const& converter(std::use_facet<ConverterFacet>(loc));
char const* nextToRead = s.data();
wchar_t buffer[BUFSIZ];
wchar_t* nextToWrite;
std::codecvt_base::result result;
std::wstring wresult;
while ((result
= converter.in
(state,
nextToRead, s.data()+s.size(), nextToRead,
buffer, buffer+sizeof(buffer)/sizeof(*buffer), nextToWrite))
== std::codecvt_base::partial)
{
wresult.append(buffer, nextToWrite);
}
if (result == std::codecvt_base::error) {
throw std::runtime_error("Encoding error");
}
wresult.append(buffer, nextToWrite);
return wresult;
}
- 1. Python: Konvertiere eine Zeichenkette in eine Ganzzahl
- 2. Konvertiere eine Zahl in eine Zeichenkette
- 3. Umwandlung von wchar_t * in Zeichenkette
- 4. Konvertiere Zeichenkette in eine andere Kodierung
- 5. Wie konvertiere ich eine Zeichenkette in JavasScript in Wirbelsäulenfall?
- 6. Konvertiere eine Liste von Zeichenketten in eine Zeichenkette
- 7. Wie bekomme ich eine nullterminierte Zeichenkette von einer C# Zeichenkette?
- 8. Wie entkomme ich eine Zeichenkette in Java?
- 9. Konvertiere eine Zeichenkette in das richtige Datumsformat (Joomla Format)
- 10. Wie konvertiert man eine Zeichenkette in eine Ganzzahl in C#
- 11. Konvertiere Zeichenkette in Bild in Python
- 12. Wie konvertiere ich hexadezimale Zeichenkette in vorzeichenbehaftete Ganzzahl?
- 13. Wie konvertiere ich ein Bild als Zeichenkette in PNG-Datei
- 14. Wie definiere ich eine vorzeichenlose char * Zeichenkette?
- 15. Konvertiere Zeichenkette zu Zahl in Rechner
- 16. Wie übergebe ich eine Zeichenkette an setContentView()?
- 17. Eine Zeichenkette groß schreiben
- 18. Wie zeichne ich eine Zeichenkette ohne Padding
- 19. Daten Umwandlung in eine Zeichenkette
- 20. Eine Zeichenkette in Java formatieren
- 21. Eine Zeichenkette von Benutzer
- 22. Q: Wie importiere ich eine Konstante in eine Zeichenkette?
- 23. Eine Zeichenkette in JavaScript initialisieren
- 24. Eine Stapelspur in eine Zeichenkette umwandeln?
- 25. Wie man eine Zeichenkette '010101010' in eine echte binäre Zeichenkette umwandelt, in PHP
- 26. Wie erstelle ich ein Objekt aus einer Zeichenkette in Java (wie man eine Zeichenkette auswertet)?
- 27. Wie man Anführungszeichen in eine Zeichenkette einbezieht
- 28. Wie konvertiert man eine Zeichenkette in Matlab?
- 29. Wie man Gläser findet, die eine übereinstimmende Zeichenkette und eine nicht übereinstimmende Zeichenkette in Linux haben
- 30. eine Zeichenkette mit scanf Eingeben()
Die meisten Windows-Funktionen tatsächlich in zwei Geschmacksrichtungen, ein „A "und" W "Version. Z.B. MessageBoxA/MessageBoxW, wobei sich ein Makro "MessageBox" auf eines der beiden bezieht. Wenn Sie jedoch den expliziten 'MessageBoxA'-Namen verwenden, können Sie ein' char * 'unabhängig von den Projekteinstellungen übergeben. – MSalters