Maison >développement back-end >C++ >Comment puis-je convertir efficacement une « wstring » en une « string » en C ?

Comment puis-je convertir efficacement une « wstring » en une « string » en C ?

DDD
DDDoriginal
2024-12-14 15:08:11700parcourir

How can I efficiently convert a `wstring` to a `string` in C  ?

Conversion d'une chaîne en chaîne en C

Problème

Comment puis-je convertir une chaîne en chaîne en C ? Prenons l'exemple suivant :

#include <string>
#include <iostream>

int main() {
    std::wstring ws = L"Hello";
    std::string s(ws.begin(), ws.end());

    std::cout << "std::string =     " << s << std::endl;
    std::wcout << "std::wstring =    " << ws << std::endl;
    std::cout << "std::string =     " << s << std::endl;
}

Avec la ligne commentée, le résultat est :

std::string =     Hello
std::wstring =    Hello
std::string =     Hello

Cependant, sans cela, le résultat est uniquement :

std::wstring =    Hello

Réponse

En utilisant std::wstring_convert (C 11)

Comme l'a souligné Cubbi, std::wstring_convert fournit une solution simple :

#include <locale>
#include <codecvt>

std::wstring string_to_convert;

using convert_type = std::codecvt_utf8<wchar_t>;
std::wstring_convert<convert_type, wchar_t> converter;

// Convert wstring to string
std::string converted_str = converter.to_bytes(string_to_convert);

Vous pouvez également utiliser des fonctions d'assistance pour simplifier la conversion :

// Convert string to wstring
std::wstring s2ws(const std::string& str) {
    using convert_typeX = std::codecvt_utf8<wchar_t>;
    std::wstring_convert<convert_typeX, wchar_t> converterX;
    return converterX.from_bytes(str);
}

// Convert wstring to string
std::string ws2s(const std::wstring& wstr) {
    using convert_typeX = std::codecvt_utf8<wchar_t>;
    std::wstring_convert<convert_typeX, wchar_t> converterX;
    return converterX.to_bytes(wstr);
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn