J’essaie de convertir une chaîne de caractères char * en wchar_t *. J’ai vu cette question a été posée à plusieurs resockets, sans solution / solution de résolution portable.
Comme suggéré ici , swprintf m’a semblé la bonne solution, mais j’ai découvert qu’il existait deux versions! À savoir:
Mon programme ressemblerait à ceci:
const unsigned int LOCAL_SIZE = 256; char* myCharSsortingng = "Hello world!"; wchar_t myWCharSsortingng[LOCAL_SIZE];
Et à ce stade:
swprintf(myWCharSsortingng,LOCAL_SIZE,L"%hs",myCharSsortingng );
ou:
swprintf(myWCharSsortingng,L"%hs",myCharSsortingng );
Et changer de compilateur (mingw 4.5.2 mingw 4.7.2) J’ai eu cette version différente qui a été implémentée, donc dans un cas une erreur au moment de la compilation! Mes questions:
modifier
std::wssortingng_convert
ne semble pas être disponible pour mon compilateur (ni 4.5.2 ni 4.7.2, y compris #include
Je vérifierai plus tard si je peux utiliser Boost Format Library pour essayer de résoudre ce problème …
Étant donné que je peux utiliser C ++ et que l’efficacité n’est pas un problème, je peux utiliser les éléments suivants:
std::wssortingng(myCharSsortingng,myCharSsortingng+strlen(myCharSsortingng)).c_str()
Et si mettre un wchar_t*
était nécessaire, cela pourrait être comme ceci:
strcpy(myWCharSsortingng,std::wssortingng(myCharSsortingng,myCharSsortingng+strlen(myCharSsortingng)).c_str() );
Testé ici .
Documentation à partir des méthodes du constructeur basic_ssortingng :
first, last Input iterators to the initial and final positions in a range. The range used is [first,last), which includes all the characters between first and last, including the character pointed by first but not the character pointed by last. The function template argument InputIterator shall be an input iterator type that points to elements of a type convertible to charT. If InputIterator is an integral type, the arguments are casted to the proper types so that signature (5) is used instead.