Caractères larges à étroits

Quelle est la manière la plus propre de convertir un std :: wssortingng en std :: ssortingng? J’ai déjà utilisé des macros W2A et autres, mais je ne les ai jamais aimées.

La méthode la plus native est std::ctype::narrow() , mais cela ne fait guère plus que std :: copy comme suggéré par gishu et vous devez toujours gérer vos propres tampons.

Si vous n’essayez pas d’exécuter une traduction mais que vous voulez simplement une ligne simple, vous pouvez faire std::ssortingng my_ssortingng( my_wssortingng.begin(), my_wssortingng.end() ) .

Si vous voulez une véritable traduction de l’encodage, vous pouvez utiliser locales / codecvt ou l’une des bibliothèques d’une autre réponse, mais je suppose que ce n’est pas ce que vous recherchez.

Ce que vous recherchez peut-être, c’est icu , une bibliothèque multi-plateforme open-source pour gérer les codages Unicode et hérités, entre autres choses.

Si l’encodage dans le wssortingng est UTF-16 et que vous souhaitez convertir en chaîne codée UTF-8, vous pouvez utiliser la bibliothèque UTF8 CPP :

 utf8::utf16to8(wstr.begin(), wstr.end(), back_inserter(str)); 

Comme il s’agit de l’un des premiers résultats pour une recherche de “chaîne étroite c ++” et qu’elle date d’avant C ++ 11, voici la manière de résoudre ce problème avec C ++ 11:

 #include  #include  #include  std::ssortingng narrow( const std::wssortingng& str ){ std::wssortingng_convert< std::codecvt_utf8_utf16< std::wstring::value_type >, std::wssortingng::value_type > utf16conv; return utf16conv.to_bytes( str ); } 

Voir si cela aide. Celui-ci utilise std :: copy pour atteindre votre objective.

http://www.codeguru.com/forum/archive/index.php/t-193852.html

Je ne sais pas si c’est le “plus propre” mais j’ai utilisé la fonction copy () sans aucun problème jusqu’ici.

 #include  #include  using namespace std; ssortingng wssortingng2ssortingng(const wssortingng & wstr) { ssortingng str(wstr.length(),' '); copy(wstr.begin(),wstr.end(),str.begin()); return str; } wssortingng ssortingng2wssortingng(const ssortingng & str) { wssortingng wstr(str.length(),L' '); copy(str.begin(),str.end(),wstr.begin()); return wstr; } 

http://agraja.wordpress.com/2008/09/08/cpp-ssortingng-wssortingng-conversion/