Comment puis-je convertir std :: wstring en const * char en C++?convertir std :: wstring en const * char en C++
Répondre
Vous pouvez convertir un std::wstring
à un const wchar_t *
en utilisant la fonction membre c_str
:
std::wstring s;
const wchar_t *str = s.c_str();
Cependant, une conversion à un const char *
n'est pas naturel: il faut un appel supplémentaire à std::wcstombs
.
pouvez-vous donner un exemple complet, y compris wcstombs? J'essaie de résoudre cela comme vous le suggérez. –
lorsque wstring est wStr: 'const wchar_t * str = wStr.c_str(); size_t taille = wcslen (str) * 2 + 2; char * StartPoint = nouveau caractère [taille]; size_t c_size; wcstombs_s (& c_size, StartPoint, taille, str, taille); ' – arielhad
@arielhad Pourquoi +2 à la fin de la définition de la taille? En outre, cette 'formule' pour la taille suppose que char est 8 bits, et wchar_t est 16 bits, n'est-ce pas? Je pense qu'il vaudrait mieux l'écrire en appelant sizeof() car ce n'est pas forcément vrai pour toutes les plateformes. – KjMag
Vous ne pouvez pas faire cela comme ça. std::wstring
représente une chaîne de caractères larges (Unicode), tandis que char*
dans ce cas est une chaîne de caractères ASCII. Il doit y avoir une conversion de page de code d'Unicode en ASCII.
Pour effectuer la conversion, vous pouvez utiliser les fonctions de bibliothèque standard telles que wcstombs
ou la fonction Windows WideCharToMultiByte
.
Mise à jour pour intégrer les informations des commentaires, merci de le signaler.
La bibliothèque standard gère cela. Voir 'wcrtomb',' wcsrtombs', par exemple. – nothrow
@Yossarian: Le problème avec les fonctions de la bibliothèque standard est que la norme ne définit pas quel jeu de caractères larges, ni quels jeux de caractères multi-octets, sont utilisés dans 'wcstombs'. Si vous avez besoin de la chaîne dans un encodage spécifique (comme UTF-8), vous devez écrire la conversion vous-même, ou utiliser une extension spécifique à la plate-forme (telle que WideCharToMultiByte) –
std :: string peut contenir unicode via UTF- 8 et std :: wstring n'est pas marié à UTF-16/UTF-32. Donc, ceci est une réponse très trompeuse. – anno
- 1. Convertir CString en std :: wstring
- 2. const char * en C++
- 3. Impossible de convertir const char * en char *
- 4. Comment convertir std :: wstring en TCHAR *
- 5. const unsigned char * à std :: string
- 6. 'std char virtuel :: ctype <wchar_t> :: do_narrow (wchar_t, char) const' est protégé
- 7. Comment convertir un wstring en NSString
- 8. convertir BSTR à const char *
- 9. Convertir Wstring en CString
- 10. Comment utiliser std :: wstring avec std :: istringstream?
- 11. Comment convertir depuis std :: wstring _TCHAR []?
- 12. Comment utiliser SimpleIni pour retourner wchar_t, puis convertir en std :: wstring?
- 13. L'affectation d'un "const char *" à std :: string est autorisée, mais l'affectation à std :: wstring n'est pas compilée. Pourquoi?
- 14. Comment convertir un System :: String^en const char *?
- 15. conversion de 'const wchar_t' en 'std :: ctype <char> :: _ Elem', perte de données possible
- 16. compare le tampon avec const char * en C++
- 17. C++: utilisation de std :: wstring dans la fonction API
- 18. std :: wstring length
- 19. convertir char ** en char * ou char
- 20. Comment convertir un caractère char * en std :: vector?
- 21. convertir la chaîne en char c
- 22. Comment faire pour convertir unsigned char * en std :: string en C++?
- 23. Cast "vide const *" à "const char *"
- 24. const char * à TDesC16
- 25. Comment convertir 'const wchar *' en 'const char *' sur Mac OS X?
- 26. Convertir void * représentation d'un dword en wstring
- 27. .NET/C# - Convertir char [] en chaîne
- 28. Structure Init avec std :: wstring
- 29. Comment faire pour importer const char * API en C#?
- 30. Libération de la mémoire pour const char * variable en C++
Il y a plusieurs façons. Lequel vous convient le mieux dépend de beaucoup de faits que vous n'avez pas fournis. Quel encodage voulez-vous avoir le résultat? Quelle plate-forme/conversion de codage utilisez-vous? – sbi
Quel système d'exploitation? Au moins sur Windows, vous devriez le faire rarement, par exemple. si vous voulez écrire une chaîne UTF-8 dans un fichier. – Philipp
Il y a ce "minimum absolu que tout développeur de logiciel doit savoir absolument et absolument sur les jeux de caractères et d'Unicode (pas d'excuses!)] (Http://www.joelonsoftware.com/articles/Unicode.html)", qui doit être lu ! – Jaywalker