首頁 > 後端開發 > C++ > 如何在 C 中有效地將 `wstring` 轉換為 `string` ?

如何在 C 中有效地將 `wstring` 轉換為 `string` ?

Susan Sarandon
發布: 2024-12-27 05:08:11
原創
422 人瀏覽過

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

將 wstring 轉換為字串

問題:
如何在 C 中有效地將 wstring 轉換為字串?

上下文:
在 C 中,wstring和 string 分別表示寬字串和窄字串。在各種情況下,這兩種類型之間的轉換可能是必要的。

原始嘗試:

#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;
}
登入後複製

問題:
提供的範例只輸出初始wstring 值,而不輸出字串

使用std::wstring_convert的解:
C 11 引進了std::wstring_convert,簡化了轉換過程:

#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;
}
登入後複製

單線解:

std::wstring str = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes("some string");
登入後複製

包裝函數解決方案:

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);
}
登入後複製

以上是如何在 C 中有效地將 `wstring` 轉換為 `string` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板