comment faire pour convertir de LPWSTR à 'const char*'
Après l'obtention d'un struct en C# C++ à l'aide de C++/CLI:
public value struct SampleObject
{
LPWSTR a;
};
Je veux imprimer son exemple:
printf(sampleObject->a);
mais j'ai eu cette erreur:
Erreur 1 error C2664: 'printf' : impossible de convertir le paramètre 1 de
'LPWSTR' à 'const char *'
Comment puis-je convertir de LPWSTR to char*
?
Merci à l'avance.
Tu ne peux pas faire:
super! pourquoi ne pas vous répondre à la place, alors je vais le marquer comme réponse! 😀
Il n'est pas susceptible de travailler... Cela ne peut pas convertir les données, il suffit d'indiquer au compilateur de ne pas s'inquiéter du fait que c'est le mauvais type de données.
vous êtes de droite. il l'habitude de travailler. J'ai eu une exception pour cette conversion. une idée?
En C++/CLI, vous pouvez simplement utiliser
printf((const char*)sampleObject->a);
super! pourquoi ne pas vous répondre à la place, alors je vais le marquer comme réponse! 😀
Il n'est pas susceptible de travailler... Cela ne peut pas convertir les données, il suffit d'indiquer au compilateur de ne pas s'inquiéter du fait que c'est le mauvais type de données.
vous êtes de droite. il l'habitude de travailler. J'ai eu une exception pour cette conversion. une idée?
En C++/CLI, vous pouvez simplement utiliser
marshal_as
pour convertir directement System::String^
à char*
, pas besoin de passer par LPWSTR le long du chemin.OriginalL'auteur olidev | 2012-03-23
Vous devez vous connecter pour publier un commentaire.
Ne se convertissent pas.
Utilisation
wprintf
au lieu deprintf
:Voir les exemples qui explique comment l'utiliser.
Alternativement, vous pouvez utiliser
std::wcout
:De même, utiliser les fonctions qui sont conçus pour une large char, et oublier l'idée de la conversion de
wchar_t
àchar
, comme il peut de perte de données.Avoir un regard sur les fonctions qui traitent de large-char ici:
avez-vous un exemple de comment l'utiliser? il n'est pas facile: wsprintf(string)
J'ai édité ma réponse. Voir les exemples maintenant.
Vous n'avez pas besoin
wprintf
,printf("%ls")
travaille trop.Ou,
std::wcout
.OriginalL'auteur Nawaz
Utiliser le
wcstombs()
fonction, qui est situé dans<stdlib.h>
. Voici comment l'utiliser:Espère que cela a aidé à quelqu'un! Cette fonction m'a sauvé de beaucoup de frustration.
même type de LPTSTR pouvez utiliser la même méthode pour stocker dans la mémoire tampon.
Cela ne garantit pas l'encodage en UTF-8. Utilisation
WideCharToMultiByte
la place et de définir explicitement le codage UTF-8. Voir @79E09796 réponse par exemple.Ce qui est beaucoup plus compliqué que la fonction, et il y a des cas, si nous sommes sûrs, que le WSTR contient en réalité que de l'ascii 7 données.
OriginalL'auteur Ivan Gozali
Suffit d'utiliser
printf("%ls", sampleObject->a)
. L'utilisation del
dans%ls
signifie que vous pouvez passer unwchar_t[]
commeL"Wide String"
.(Non, je ne sais pas pourquoi le L et w préfixes sont mélangés tout le temps)
OriginalL'auteur MSalters
OriginalL'auteur 79E09796
Voici une Solution Simple. Vérifier wsprintf
Le "%S" permettra de convertir implicitement UNICODE en ANSI.
OriginalL'auteur Lakshmanan Meiyappan
utilisation
WideCharToMultiByte()
méthode pour convertir les caractères multi-octets.Ici est un exemple de la conversion de LPWSTR char*
large ou un personnage à l'autre.
OriginalL'auteur HaSeeB MiR