Probleme mit Typkonvertierung
Verfasst: 4. Februar 2009 15:30
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:
Die Ausgabe kontrolliere ich gleich: 1 ist der counter - alles ok
nun zum Problem:
ich lese mit
die Daten aus - länge Passt, alles mal da.
jetzt verschiedene Zugriffe:
Datentypen:
[/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
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)); 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);
ich lese mit
Code: Alles auswählen
reply = tcpSocket.readAll(); // reply ist ein QByteArrayjetzt 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; // =0Ausgabe wie im // geschrieben, 1 0 0.
Wieso funktioniert die direkte Dereferenzierung in C, nicht aber in C++ ???
Ich bitte Euch um Hilfe !
mfg Alex