Konvertieren von union-char to string ???



  • Hallo Leute!

    Ich habe gerade probiert einen char eines union in einen String zu formatieren, wie anhand folgenden Beispiels ersichtlich ist.
    Den Fehlercode habe ich beigefügt, vielleicht kennt den wer??
    Das zweite Beispiel was ich probierte, funktionierte ganz normal.
    Kann man die union char überhaupt nicht in string formatieren ??

    //Bsp 1
    
    union uByte 
    { 
    long lByte; 
    char cByte[4]; 
    };
    
    uByte xy;
    
    xy.lByte=0x32A43B33;
    char part1 = xy.cByte[0];
    char part2 = xy.cByte[1];
    char part3 = xy.cByte[2];
    char part4 = xy.cByte[3];
    
    std::string teststring = part1;  // Konvertieren von char in string
                                     // Fehler !!
    /* error C2440: 'initializing' : 'char' kann nicht in 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' konvertiert werden */
    
    //Bsp 2
    char test[] = "c:/"; 
    std::string tstr = test; 
    tstr += "arial.ttf";
    

  • Mod

    std::string hat keinen Konstruktor mit einem einzelnen char als Argument. Ein paar andere Möglichkeiten:

    Kopierkonstruktor verwenden, der kennt char:

    std::string teststring;
    teststring = part1;
    

    Anderen Konstruktor verwenden, zum Beispiel diesen:

    std::string teststring(1,part1);
    

    ⚠ Ist ein schönes Beispiel dafür, dass = bei einer Initialisierung eben nicht den Kopierkonstruktor aufruft. ⚠

    edit: Und für die Zukunft hier noch eine Übersicht über die unterschiedlichen Konstruktoren von std::string:
    http://www.cplusplus.com/reference/string/string/operator=/
    http://www.cplusplus.com/reference/string/string/string/

    edit2: Und mit der Union hat das übrigens nichts zu tun, falls du das nicht verstanden haben solltest. Das ist nur Zufall, dass du beim Arbeiten mit Unions (wozu eigentlich? Unions braucht man fast nie. Das sieht gefährlich undefiniert aus, was du da machen willst) auf das Problem gestoßen bist.



  • Danke, hat mir viel geholfen.



  • @SeppJ
    Du verwechselst Kopierkonstruktor und Zuweisung.



  • SeppJ schrieb:

    Kopierkonstruktor verwenden, der kennt char:

    std::string teststring;
    teststring = part1;
    

    [...]

    ⚠ Ist ein schönes Beispiel dafür, dass = bei einer Initialisierung eben nicht den Kopierkonstruktor aufruft. ⚠

    Das ist eben keine Initialisierung, sondern eine Zuweisung mittels operator= . Der Kopierkonstruktor wird auch nicht aufgerufen (möglicherweise intern, aber das ist ein Implementierungsdetail).


  • Mod

    Ups, ja. Das meinte ich. Sprachlicher Ausrutscher.


Anmelden zum Antworten