Probleme mit Typkonvertierung

Alles rund um die Programmierung mit Qt
Antworten
azikal
Beiträge: 1
Registriert: 8. Januar 2009 16:35
Wohnort: Wels

Probleme mit Typkonvertierung

Beitrag von azikal »

Hallo liebe QT-Anhänger,
vielleicht kann mir einer bei diesem Problem helfen:

Client in C sendet Daten über TCP-Socket:
Folgende Struktur wird gesendet:

Code: Alles auswählen

struct s_data {                           	// Datenblock
	struct s_datetime datetime;		// 4 Bytes
	quint16 sid;				// 2 Bytes
	quint16 interv;				// 2 Bytes
	quint16 counter;			// 2 Bytes
}__attribute__ ((packed));				
Die Ausgabe kontrolliere ich gleich: 1 ist der counter - alles ok

Code: Alles auswählen

send(create_socket, (char*)data_ptr,10 + (bloecke *2) +2 , 0);  //10 + (bloecke *2) +2
		data = (struct s_data*)data_ptr;
		printf ("Ausgabe data = %u\n",(*data).counter);
nun zum Problem:
ich lese mit

Code: Alles auswählen

reply = tcpSocket.readAll(); // reply ist ein QByteArray
die Daten aus - länge Passt, alles mal da.

jetzt verschiedene Zugriffe:

Datentypen:

Code: Alles auswählen

 struct s_data sd, *sd_ptr;
quint16 *sdhelper;

Code: Alles auswählen

sdhelper = reinterpret_cast<quint16*>(reply.data());
            		sd_ptr = reinterpret_cast<struct s_data*>(reply.data());
            		sd.counter = *(sdhelper+4);
            		cout << "sd: = " << dec << sd.counter << endl; // =1
            		cout << "sdhelper: = " << dec << *(sdhelper+4) << endl; // =0
            		cout << "sd_ptr: = " << dec << (*sd_ptr).counter << endl; // =0
[/code]

Ausgabe wie im // geschrieben, 1 0 0.
Wieso funktioniert die direkte Dereferenzierung in C, nicht aber in C++ ???


Ich bitte Euch um Hilfe !

mfg Alex
Antworten