• libCEF总结02字符串


    libCEF 的 CefString、cef_string_t 在 Windows 下均表示一个 16 位的 Unicode 字符串,它们的使用请参考下面的代码

    {//wchar_t* ==> CefString

    const wchar_t* pUTF16 = L"字符串(UTF-16)";

    CefString s(pUTF16); // 处会被截断, 内部调用 FromWString

    s = pUTF16; // 处会被截断, 内部调用 FromWString

    CefString s1(std::wstring(pUTF16,12)); // 处不会被截断,内部调用 FromWString

    s.FromWString(std::wstring(pUTF16,12)); // 处不会被截断

    s.FromString(pUTF16,12,true); // 处不会被截断,这个效率应该是最高的(不会产生 std::wstring 临时对象)

    }

    {//CefString ==> wchar_t*

    CefString s(L"字符串");

    const wchar_t*pUTF16 = NULL;

    pUTF16 = s.ToWString().c_str(); //s.ToWString() 返回的是 std::wstring 对象

    pUTF16 = ((std::wstring)s).c_str(); //(std::wstring)s 会调用 ToWString 返回 std::wstring 对象

    pUTF16 = (const wchar_t*)s.c_str(); //效率最高,但有可能返回 NULL

    }

    {//UTF-8 ==> CefString

    const wchar_t* pUTF16 = L"字符串(UTF-8)";

    char pUTF8[256];

    int nLen8 = WideCharToMultiByte(CP_UTF8,0,pUTF16,11,pUTF8,sizeof(pUTF8),NULL,NULL);

    pUTF8[nLen8] = '';

    CefString s(pUTF8); // 处会被截断, 内部调用 FromString

    s = pUTF8; // 处会被截断, 内部调用 FromString

    CefString s1(std::string(pUTF8,nLen8)); // 处不会被截断,内部调用 FromString

    s.FromString(std::string(pUTF8,nLen8)); // 处不会被截断

    }

    {//CefString ==> UTF-8

    CefString s(L"字符串");

    const char*pUTF8 = NULL;

    pUTF8 = s.ToString().c_str(); //s.ToString() 返回的是 std::string 对象

    pUTF8 = ((std::string)s).c_str(); //(std::string)s 会调用 ToString 返回 std::string 对象

    }

    {//CString ==> CefString

    CString s(_T("字符串"));

    CStringW sW((LPCTSTR)s,s.GetLength());

    CefString sCS;

    sCS.FromString((const wchar_t*)sW,sW.GetLength(),true);

    }

    {//CefString ==> CString

    CefString sCS(L"字符串");

    CString s((const wchar_t*)sCS.c_str(),sCS.length());

    }

    {//cef_string_t 的使用

    CefSettings settings; //settings.locale 就是一个 cef_string_t

    /**************************************************************************

    下面的代码给 cef_string_t 变量赋值,即给 settings.locale 赋值

    CefString 的成员变量 string_ 就是一个 cef_string_t*

    创建 CefString 临时对象时,该对象的成员变量 string_ = &settings.locale

    接着调用 CefString::operator= 函数,给 string_ 赋值 L"zh-CN"(其实是给 settings.locale 赋值)

    CefString 临时对象析构时,成员变量 owner_ 为 false,就不会释放 string_ 所指向的字符串了

    最终 settings.locale 就是 L"zh-CN"

    **************************************************************************/

    CefString(&settings.locale) = L"zh-CN";

    /**************************************************************************

    根据 cef_string_t 变量获得 Unicode 字符串的首地址和字符数

    **************************************************************************/

    const wchar_t* pStr = (const wchar_t*)settings.locale.str; //首地址,有可能为 NULL

    int nLen = settings.locale.length; //字符数

    }

  • 相关阅读:
    团队项目简介及视频
    构建之法阅读笔记04
    软件工程结对作业02
    团队项目NABCD
    搜狗输入法人机交互设计的用户体验
    站立会议个人博客5(2016/4/23)
    站立会议个人博客4(2016/4/22)
    典型用户和用户场景描述
    站立会议个人博客3(2016/4/21)
    站立会议个人博客2(2016/4/20)
  • 原文地址:https://www.cnblogs.com/hanford/p/6168746.html
Copyright © 2020-2023  润新知