[C++] Cast zwischen zwei verschiedenen Datentypen

Online-Skater

Erfahrenes Mitglied
Hallo tutorialaner,

ich habe ein Problem mit dem casten eines Datentyps in einen anderen bzw. mit der Zuweisung. Hier der betreffende Code:
C++:
//Get Load Information
std::list<LoadInformation> Info(this->getLoadInformation());

//Send Load Information via IODate and notify
	    IODatap result;
	    const size_t len = sizeof(Info);
	    char* content = IOData::malloc(len);
	    *content = reinterpret_cast<char>(Info); // Error
	    result = IOData::create(new IOData(content, len));
	    notifyDataSource(LOAD_INFO, result);
Also es soll eine Liste mit Lastinformationen in ein char-Array gepresst werden damit es als Datenpaket einem anderen Plugin zugewiesen werden kann. Nun scheitere ich an der Typumwandlung und habe vieles versucht ohne Ahnung zu haben wie es klappen könnte.

Danke für eure Hilfe.
 
Hi,

so wird es definitiv nicht mal im Ansatz gehen.

Hier:
sizeof(Info);
Überprüf mal den Wert der rauskommt. Der wird nicht richtig sein da der Speicher für die Elemente nicht mitgerechnet wird.

Sollen die Daten an ein anderes Programm gesendet werden, oder nur an ein Plugin des selben Programms?

Gruß
Anfänger
 
Oh ja du hast natürlich Recht es muss heißen:
C++:
 const size_t len = Info.size() * sizeof(LoadInformation);

Es ist ein Datensatz für ein plugin desselben Programms. Fakt ist das der dafür notwendige Datensatz in einem bestimmten Format ist; sprich der content ein char-Array ist... und deshalb brauche ich eine konvertierung. Auch mit C-Bordmitteln habe ich es noch nicht hinbekommen.:(
 
Ok also ist eine typische Aufgabe der Serialisierung und hat nichts mit casten zu tun.
Hier mein Lösungsvorschlag: (boost Serialiserung war mir dafür zu owerkilled)
C++:
//Get Load Information
		std::list<LoadInformation> Info(this->getLoadInformation());

		//Send Load Information via IODate and notify
	    IODatap result;
	    const size_t len = (Info.size() * sizeof(LoadInformation)) + sizeof(uint8_t);
	    uint16_t pos = 0;
	    char* content = IOData::malloc(len); // speicher reservieren
	    content[pos++] = (char)Info.size(); // anzahl datensätze setzen
	    for (std::list<LoadInformation>::iterator it(Info.begin()); it != Info.end(); ++it)
	    {
	    	content[pos++] = (char)it->ifid;
	    	content[pos++] = (char)it->tx_rel;
	    }
	    result = IOData::create(new IOData(content, len));
	    notifyDataSource(LOAD_INFO, result);

mfg :p
 
Zurück