zoukankan      html  css  js  c++  java
  • wxString与其它类型的转换(转自wxWiki)

    有空再慢慢翻成中文的,暂时就这样行了。

    Converting everything to and from wxString

    From WxWiki

    Jump to: navigation, search

    This question seems common so I thought I'd write an article. Note that sometimes there may be more than one possible solutions, so don't forget to check the docs.

    Note that it is recommended to use wxString as much as possible. Do no use char* or std::string unless you use a third-party library that requires you to do so.

    Contents

    [hide]

    Literals

    A literal is a string written in code with "quotes around it". A literal is not a wxString, and (in wxWidgets 2.8) will not be implicitly converted to one. This means that you can never pass in a raw literal into a wxWidget function or method (unless you don't care about your app not building with Unicode-enabled wxWidgets builds)

    MessageBox("I'm a mistake!")  // WRONG in WxWidgets 2.8 (OK in 2.9)

    Instead, wxWidgets (prior to wxWidgets 2.9) requires you to use one of these macros to turn literals into wxString-compatible characters:

    _("text that can be translated")

    wxT("text that won't be translated")

    _T("same as wxT")

    char* c = "sometext";

    wxT(c) // WRONG, not a literal

    Rather than being a nuisance, the _(), wxT(), and _T() macros take care of some unicode issues and help with internationalization.

    char* to wxString

    const char* chars = "Hello world";

    // assuming your string is encoded as UTF-8, change the wxConv* parameter as needed

    wxString mystring(chars, wxConvUTF8);

    wxString to char*

    void my_function(const char* foo)

    {

    }

    ...

    wxString mystring(wxT("HelloWorld"));

    // you could give the encoding you want as a parameter to mb_str(), e.g. mb_str(wxConvUTF8)

    my_function( mystring.mb_str() );

    mb_str() returns a temporary pointer; if you need the output for more than one function call (as is the case above), you can store the char buffer for a little while :

    wxString s( wxT("some string") );

    wxCharBuffer buffer=s.ToUTF8();

    foo( buffer.data() );  // data() returns const char *

    bar( buffer.data(), strlen(buffer.data()) );  // in case you need the lenght of the data

    And if you really need to copy it in to char* (but why would you? ;) :

    wxString mystring(wxT("HelloWorld"));

    char cstring[1024];

    // assuming you want UTF-8, change the wxConv* parameter as needed

    strncpy(cstring, (const char*)mystring.mb_str(wxConvUTF8), 1023);

    You can also use ToUTF8(), since which encoding you get is clearer than with mb_str()

    From const char* to char*:

    wxString mystring(wxT("HelloWorld"));

    (const_cast<char*>((const char*)mystring.mb_str()))

    wchar_t* to wxString

    const wchar_t* chars = L"Hello world";

    wxString mystring(chars);

    wxString to wchar_t*

    See the following methods in the docs :

    wxString::wc_str()

    wxString::wchar_str()

    wxString to TCHAR

    TCHAR tCharString[255];

    wxString myString(_T("Hello World"));

    const wxChar* myStringChars = myString.c_str();  

    for (int i = 0; i < myString.Len(); i++) {

       tCharString[i] = myStringChars [i];

    }

    tCharString[myString.Len()] = _T('\0');

    int to wxString

    wxString mystring = wxString::Format(wxT("%i"),myint);

    or

    wxString mystring;

    mystring << myint;

    float to wxString

    wxString mystring = wxString::Format(wxT("%f"), myfloat);

    or

    wxString mystring;

    mystring << myfloat;

    wxString to integer number

    wxString number(wxT("145"));

    long value;

    if(!number.ToLong(&value)) { /* error! */ }

    or

    wxString str = _T("123");

    int num;

    num = wxAtoi(str);

    wxString to floating-point number

    wxString number(wxT("3.14159"));

    double value;

    if(!number.ToDouble(&value)){ /* error! */ }

    std::string to wxString

    std::string stlstring = "Hello world";

    // assuming your string is encoded as UTF-8, change the wxConv* parameter as needed

    wxString mystring(stlstring.c_str(), wxConvUTF8);

    Starting from wxWidgets 2.9, you may also use the appropriate constructor

    std::string stlstring = "Hello world";

    // assuming your string is encoded as the current locale encoding (wxConvLibc)

    wxString mystring(stlstring);

    wxString to std::string

    wxWidgets 2.8 :

    wxString mystring(wxT("HelloWorld"));

    std::string stlstring = std::string(mystring.mb_str());

    Under wxWidgets 2.9, you may use

    wxString::ToStdString()

    std::wstring to wxString

    Starting from wxWidgets 2.9, you may use the appropriate constructor

    std::sstring stlstring = L"Hello world";

    // assuming your string is encoded as the current locale encoding (wxConvLibc)

    wxString mystring(stlstring);

    wxString to std::wstring

    Under wxWidgets 2.9, you may use

    wxString::ToStdWstring()

  • 相关阅读:
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit.java jar hell解决方案Djava.ext.dirs in ide envi..
    砍价大法
    DWR学习
    什么是WEB 2.0
    XHTML 1.0 Tags 参考
    web.config文件遇到的错误
    JDBC教程之PreparedStatement
    符合W3C标准的target=_blank形式
    dwr 登录实现 (入门知识)
  • 原文地址:https://www.cnblogs.com/godspeedsam/p/1985815.html
Copyright © 2011-2022 走看看