unsigned char zu string vereinigen



  • Hallo,
    mein Problem ist:
    Ich habe 3 unsigned char welche ich gerne zu einem string zusammenfügen würde.
    Bisher habe ich

    unsigned char com3=...;
    unsigned char com1=...;
    unsigned char com2=...;
    std::stringstream s;
    s << com1 << "," << com2 << "," << com3 << ";";
    
    return s.str();
    

    s soll dann also com1 com2 und com3 enthalten, jeweils durch ein Komma getrennt und als abschluss ein Semikolon.
    Wenn ich mir jetzt aber den return anschaue steht da nur ein einzelnes Komma drin.
    Gibt es andere Möglichkeiten das zu tun oder hab ich mich bei meinem Versuch einfach "vertippt" bzw. was vergessen?

    MfG
    Mr.T0M



  • Man hätte ja jetzt ein compilierbares Beispiel bringen können ...



  • das Problem ist das hängt in einem großen project und ist eigentlich kaum ohne kontext zu verstehen bzw zu verwenden aber ok ...

    #include <sstream>
    
    std::string getString(std::map< std::pair<unsigned char,unsigned char>, unsigned char > input){
    	std::map< std::pair<unsigned char,unsigned char>, unsigned char >::iterator it=input.begin();
    	std::pair<unsigned char,unsigned char> pair;
    	pair=it->first;
    	unsigned char com3 = it->second;
    	unsigned char com1 = pair.first;
    	unsigned char com2 = pair.second;
    	std::stringstream s;
    	s << com1 ;
    	s << "," << com2 << "," << com3 << ";";
    	return s.str();
    }
    

  • Mod

    Vorab: Es geht direkter. Falls du einen std::string zurückgeben

    return {char(com1), char(com2), char(com3)};
    

    bzw. mit C++03

    const unsigned char arr[] = {com1, com2, com3};
    return std::string(arr, arr + sizeof arr);
    

    Wenn ich mir jetzt aber den return anschaue steht da nur ein einzelnes Komma drin.

    Kann ich so nicht nachvollziehen. Bitte per C&P das Programm hier posten.

    Edit: Schon da? Mal sehen...



  • Mr.T0M schrieb:

    das Problem ist das hängt in einem großen project und ist eigentlich kaum ohne kontext zu verstehen bzw zu verwenden aber ok ...

    Nein, das Problem ist, dass du ein Beispielprogramm schreibst, das den Fehler reproduziert. Dabei wirst du dann gegebenenfalls feststellen, dass der Fehler ganz woanders liegt.


  • Mod

    Wie rufst du die Funktion auf? Ist die Map evt. leer?

    #include <iostream>
    #include <sstream>
    #include <map>
    
    std::string getString(std::map< std::pair<unsigned char,unsigned char>, unsigned char > input)
    {
    	std::map< std::pair<unsigned char,unsigned char>, unsigned char >::iterator it=input.begin();
    	std::pair<unsigned char,unsigned char> pair;
    	pair=it->first;
    	unsigned char com3 = it->second;
    	unsigned char com1 = pair.first;
    	unsigned char com2 = pair.second;
    	std::stringstream s;
    	s << com1 ;
    	s << "," << com2 << "," << com3 << ";";
    	return s.str();
    }
    
    int main()
    {
    	std::cout << getString({{{(unsigned char)'a', (unsigned char)'b'}, (unsigned char)'c'}});
    }
    

    Ausgabe mit GCC (4.8): a,b,c;



  • Ich habe die befürchtung das meine com1 bis 3 nen kancks weg haben ... aber auch dann soltle in s doch mindestens ",,;" stehen oder?



  • Ok da war ich etwas zu langsam...
    Wenn ich die funktion aufrufe ist die Map auf jedenfall nicht leer, da sie auch an andere Stelle verwendet wird (zwar in einer anderen Form) aber da klappt alles


  • Mod

    Es könnte sein dass das dritte Zeichen '\b' als Wert hat und die anderen beiden Leerraum sind.

    std::cout << getString({{{(unsigned char)' ', (unsigned char)' '}, (unsigned char)'\b'}});
    

    Ergibt als Ausgabe " , ;" (ohne Anführungszeichen)



  • OK das könnte sein,
    ich bekomme die Map von einer anderen funktion geliefert, mit der ich als Programmierer nichts zu tun habe.
    Ich "reiche" die map nur durch meinen Programmteil druch.
    Desswegen muss ich sie auch von von der Map in einen string umwandeln und wieder zurück, da es sonst mit den Schnittstellen nicht passt, und ich die schnittstellen aber nicht ändnern kann.
    Da könnte es sein, das in den unsigned chars werte stehen, die in einem String "unschön" interpreitert werden und die umwandlung nicht überleben?



  • Hallo nochmal, das Problem ist gelöst...
    Es sind die "sonderzeichen" wie EOF oder /b die Probleme machen.
    Die Lösung:
    Ich caste die unsigned char in integer und speichere die echten Zahlen im string und caste wieder zurück wenn nötig.

    Dann nochmal vielen Dank für die schnellen Antworten.


Log in to reply