Maison > développement back-end > C++ > Comment convertir efficacement `wstring` en `string` en C ?

Comment convertir efficacement `wstring` en `string` en C ?

Susan Sarandon
Libérer: 2024-12-27 05:08:11
original
422 Les gens l'ont consulté

How to Efficiently Convert `wstring` to `string` in C  ?

Conversion d'une wstring en chaîne

Problème :
Comment convertir efficacement une wstring en chaîne en C ?

Contexte :
En C , wstring et string représentent un caractère large et un caractère étroit chaînes, respectivement. La conversion entre ces deux types peut être nécessaire dans divers scénarios.

Tentative originale :

#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;
}
Copier après la connexion

Problème :
L'exemple fourni génère uniquement la valeur wstring initiale, pas la conversion de chaîne.

Solution utilisant std::wstring_convert :
C 11 a introduit std::wstring_convert, qui simplifie le processus de conversion :

#include <locale>
#include <codecvt>

int main() {
    std::wstring ws = L"Hello";

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

    // Convert wstring to string
    std::string s = converter.to_bytes(ws);

    std::cout << "std::string =     " << s << std::endl;
    std::wcout << "std::wstring =    " << ws << std::endl;
}
Copier après la connexion

Solution à une seule ligne :

std::wstring str = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes("some string");
Copier après la connexion

Solution de fonction Wrapper :

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);
}

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal