Comment convertir Platform :: String en char *?
Comment puis-je convertir le contenu d'une Plate-forme::String pour être utilisé par des fonctions qui s'attendent à un char* en fonction de la chaîne? Je suis en supposant que WinRT fournit des fonctions d'assistance pour cela, mais je ne peux pas les trouver.
Merci!
source d'informationauteur djcouchycouch
Vous devez vous connecter pour publier un commentaire.
Platform::String::Data()
sera de retour d'unewchar_t const*
pointant vers le contenu de la chaîne (similaire àstd::wstring::c_str()
).Platform::String
représente un immuable de la chaîne, donc il n'y a pas d'accesseur pour obtenir unwchar_t*
. Vous aurez besoin de copier son contenu, par exemple dans unstd::wstring
de faire des changements.Il n'y a pas direct façon à obtenir un
char*
ou unchar const*
parce quePlatform::String
utilise des caractères larges (tous les Metro style apps sont en Unicode pour les applications). Vous pouvez convertir plusieurs octets à l'aide deWideCharToMultiByte
.Voici un moyen très simple de le faire dans le code w/o avoir à se soucier des longueurs de tampon. Seulement utiliser cette solution si vous êtes sûr que vous faites affaire avec ASCII:
Garder à l'esprit que, dans cet exemple, le
char*
est sur la pile et disparaîtra une fois qu'il quitte la portéeVous ne devriez pas jeter un caractère large pour un char, vous mangle langues à l'aide de plus d'un octet par caractère, par exemple, le Chinois. Ici est la bonne méthode.
Il y a le
String::Data
méthode retournantconst char16*
qui est le raw chaîne unicode.De Conversion unicode en ascii ou que ce soit, c'est à dire
char16*
àchar*
c'est une autre affaire. Vous n'avez probablement pas besoin puisque la plupart des méthodes ont leurswchar
versions de ces jours.Une solution à l'aide de wcstombs: