Quelqu'un peut-il s'il vous plaît poster un code simple qui convertirait,
System::String^
À,
C ++ std::string
Ie, je veux juste attribuer la valeur de,
String^ originalString;
À,
std::string newString;
string
c++-cli
managed-c++
sivabudh
la source
la source
Vous pouvez facilement le faire comme suit
la source
Cela a fonctionné pour moi:
la source
Voici quelques routines de conversion que j'ai écrites il y a de nombreuses années pour un projet c ++ / cli, elles devraient toujours fonctionner.
la source
J'ai passé des heures à essayer de convertir une valeur ToString de liste de forme Windows en une chaîne standard afin de pouvoir l'utiliser avec fstream pour la sortie dans un fichier txt. Mon Visual Studio n'est pas fourni avec des fichiers d'en-tête de marshal que plusieurs réponses que j'ai trouvées utilisaient. Après tant d'essais et d'erreurs, j'ai finalement trouvé une solution au problème qui utilise simplement System :: Runtime :: InteropServices:
Et voici la page MSDN avec l'exemple: http://msdn.microsoft.com/en-us/library/1b4az623(v=vs.80).aspx
Je sais que c'est une solution assez simple, mais cela m'a pris des HEURES de dépannage et de visite de plusieurs forums pour enfin trouver quelque chose qui fonctionnait.
la source
J'ai trouvé un moyen simple d'obtenir une std :: string à partir d'un String ^ est d'utiliser sprintf ().
Inutile d'appeler les fonctions Marshal!
MISE À JOUR Merci à Eric, j'ai modifié l'exemple de code pour vérifier la taille de la chaîne d'entrée afin d'éviter un débordement de tampon.
la source
C # utilise le format UTF16 pour ses chaînes.
Donc, en plus de simplement convertir les types, vous devez également être conscient du format réel de la chaîne.
Lors de la compilation pour le jeu de caractères multi-octets, Visual Studio et l'API Win supposent UTF8 (en fait l'encodage Windows qui est Windows-28591 ).
Lors de la compilation pour jeu de caractères Unicode Visual Studio et l'API Win supposent UTF16.
Ainsi, vous devez également convertir la chaîne du format UTF16 au format UTF8, et pas seulement la convertir en std :: string.
Cela deviendra nécessaire lorsque vous travaillez avec des formats à plusieurs caractères comme certaines langues non latines.
L'idée est de décider que représente
std::wstring
toujours UTF16 .Et représente
std::string
toujours UTF8 .Ce n'est pas imposé par le compilateur, c'est plus une bonne politique à avoir.
Ou ayez-le dans une syntaxe plus compacte:
la source
J'aime rester à l'écart du marshaller.
Cela me semble beaucoup plus propre et plus rapide. Pas besoin de s'inquiéter de la création et de la suppression d'un contexte.
la source
// J'ai utilisé VS2012 pour écrire le code ci-dessous - convert_system_string en Standard_Sting
la source