Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menukar `wstring` kepada `string` dengan cekap dalam C?

Bagaimanakah saya boleh menukar `wstring` kepada `string` dengan cekap dalam C?

DDD
DDDasal
2024-12-14 15:08:11699semak imbas

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

Menukar wstring kepada rentetan dalam C

Isu

Bagaimanakah saya boleh menukar wstring kepada rentetan dalam C ? Pertimbangkan contoh berikut:

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

Dengan baris yang dikomen keluar, outputnya ialah:

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

Walau bagaimanapun, tanpanya, output hanya:

std::wstring =    Hello

Jawapan

Menggunakan std::wstring_convert (C 11)

Seperti yang ditunjukkan oleh Cubbi, std::wstring_convert menyediakan penyelesaian mudah:

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

Anda juga boleh menggunakan fungsi pembantu untuk memudahkan penukaran:

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

Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar `wstring` kepada `string` dengan cekap dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn