char* const wchar_t * conversion
J'ai besoin de convertir pointeur de caractère à un w_char * afin d'utiliser ParseNetworkString(). J'ai essayé de trouver des solutions à moi-même, et même si j'ai trouvé une solution, il y a une question qui me bloque de l'utiliser:
b1naryatr0phy dit dans un autre post:
std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();
cela fonctionne presque pour moi, sauf que je ne peux pas juste passer la chaîne explicitement, que sa valeur n'est pas toujours le même, ce qui signifie que je ne peux pas il suffit de le mettre entre guillemets. Si je remplace le paramètre à l'appel de la fonction, puis la première ligne me donne une erreur (exemple: std::wstring nom(LgetIpAddress()); j'ai essayé d'std::wstring(nom de L" "+ getIpAddress() + " "); , pensant qu'il a juste besoin d'un guillemet après le L, mais cela ne fonctionne pas non plus.. des suggestions?
Merci! 🙂
Extra Bravo à celui qui peut répondre à cette!
lien vers un autre post: Je veux convertir std::string dans un const wchar_t *
P. S. Désolé, juste pour clarifier, getIpAddress retourne un pointeur de caractère
OriginalL'auteur user1553248 | 2012-08-07
Vous devez vous connecter pour publier un commentaire.
Quel est le type de
getIpAddress()
?Voici un extrait de code montrant comment convertir un
string
à unwstring
(en utilisant la norme C++11, pas de contrôle d'erreur):Ne fonctionne pas pour moi dans Visual Studio 2015: voir snag.gy/Hh2lJV.jpg
OriginalL'auteur eq-
- Vous regardé une partie seulement de l'autre réponse. Il poursuit en expliquant ce que vous devez faire un
MultiByteToWideChar
pour convertir une chaîne à 8 bits 16 bits.OriginalL'auteur Mr Lister
Cela suppose que wchar_t utilise UTF-16 sur votre plate-forme (qui je suppose est Windows, de votre mention de ParseNetworkString()). Il suppose également que le char* utilise l'UTF-8 à la place d'un ancien encodage, depuis que vous avez vraiment ne devrait pas être en utilisant les anciens codages de toute façon, même sur Windows.
Si vous utilisez d'anciens codages alors vous devriez résoudre, que ce soit par le déplacement de plus de wchar_t Api entièrement (en supposant que vous ne se soucient pas de code portable) ou par l'utilisation de l'UTF-8 comme interne char* l'encodage. Si vous insistez sur l'utilisation de l'héritage des codages, alors vous aurez besoin d'utiliser l'une des fonctions qui gère la conversion, comme
mbstowcs()
(qui est locale sensibles, ce qui apporte une foule de nouveaux problèmes), ou de l'utilisationMultiByteToWideChar()
qui a des problèmes similaires, mais les mailles mieux avec les paramètres régionaux Windows.OriginalL'auteur bames53