Sonderfall string-umwandlung ( Cast-Problem ?)



  • Moin,
    ich möchte gern mein BTI_BYTE array in einen String wandeln

    typedef unsigned char         BTI_BYTE;
    //....
    BTI_BYTE m_dataBuf[255];
    //..
    using namespace std;
    //...
    // hier die Wandelmethode
    string btrieve::datenBuffer(){
            string temp;
            // die nächste Zeile wäre mein Ziel, aber wie??
            // Klar ist mir, das string nen Zeiger auf char-Array erwartet, ich aber ein unsigned char - Array liefere
    //      temp =(??????)m_dataBuf;
    
            // hab mir dann so geholfen, nicht schön, aber geht
            int i;
            for ( i = 0,temp=""; i< (int)sizeof(m_dataBuf); i++)    {
                    temp += (char) m_dataBuf[i];
            }
            return temp;
    }
    

    Danke für Hinweise
    Hanns



  • string temp(m_dataBuf);
    

  • Mod

    string temp( reinterpret_cast< const char* >( m_dataBuf ), sizeof( m_dataBuf ) );
    


  • HannsW schrieb:

    int i;
            for ( i = 0,temp=""; i< (int)sizeof(m_dataBuf); i++)    {
    

    Wäre das nicht was für dailywtf? 😃



  • groovemaster schrieb:

    HannsW schrieb:

    int i;
            for ( i = 0,temp=""; i< (int)sizeof(m_dataBuf); i++)    {
    

    Wäre das nicht was für dailywtf? 😃

    what the hell means dailywtf? 😡 😡 😡

    wasn da so komisch dran 😕 😕 😕

    Aber immer gerne bereit, etwas Freude in das Leben anderer zu geben





  • HannsW schrieb:

    wasn da so komisch dran 😕 😕 😕

    Nun, komisch darin ist, dass du

    sizeof(m_dataBuf)
    

    explizit nach int castest, weil du i so definiert hast. Wäre es nicht einfacher, i gleich mit Typ size_t zu definieren. 😉

    Zudem ist

    temp=""
    

    vollkommen unnötig.



  • groovemaster schrieb:

    Nun, komisch darin ist, dass du

    sizeof(m_dataBuf)
    

    explizit nach int castest, weil du i so definiert hast. Wäre es nicht einfacher, i gleich mit Typ size_t zu definieren. 😉

    Ohne den cast auf int habe ich aber nen compiler-fehler bekommen.Gck Dir mal an, was m_DataBuf in echt ist :

    typedef unsigned char         BTI_BYTE;
    //....
    BTI_BYTE m_dataBuf[255];
    //..
    

    wenn ich wie gehabt

    int i;
            string temp;
            for ( i = 0,temp=""; i< sizeof(m_dataBuf); i++) {
                    temp += (char) m_dataBuf[i];
            }
    

    schreibe, erhalte ich diesen Fehler:

    btrieveClass.cc: In member function `std::string btrieve::datenBuffer()':
    btrieveClass.cc:126: warning: comparison between signed and unsigned integer 
       expressions
    

    Zudem ist

    temp=""
    

    vollkommen unnötig.

    und mit dem temp="" hast DU REcht, ich habs nochmal nachgelesen:

    A string object may defined without an initializing value, in which case its initial value is an empty string (zero length, no characters):



  • HannsW schrieb:

    Ohne den cast auf int habe ich aber nen compiler-fehler bekommen.

    groovemaster schrieb:

    Wäre es nicht einfacher, i gleich mit Typ size_t zu definieren.

    btw:
    C-Casts sollte man in C++ generell nicht verwenden.


Anmelden zum Antworten