ホームページ >バックエンド開発 >C++ >C で「wstring」を「string」に効率的に変換するにはどうすればよいですか?

C で「wstring」を「string」に効率的に変換するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-14 15:08:11700ブラウズ

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

C で wstring を文字列に変換する

問題

C で wstring を文字列に変換するにはどうすればよいですか?次の例を考えてみましょう。

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

コメントアウトされた行があると、出力は次のようになります。

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

ただし、コメントアウトされていない場合、出力は次のようになります。

std::wstring =    Hello

回答

std::wstring_convert の使用 (C 11)

Cubbi が指摘したように、std::wstring_convert は簡単な解決策を提供します:

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

ヘルパー関数を使用して変換を簡素化することもできます:

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

以上がC で「wstring」を「string」に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。