Konvertieren von Struct in Byte und zurück in Struct
Derzeit arbeite ich mit Arduino Unos, 9DOFs, und XBees, und ich war versucht, erstellen Sie eine struct, die gesendet werden könnten, über serial -, byte für byte, und dann re-konstruiert in ein struct.
Bisher habe ich folgenden code:
struct AMG_ANGLES {
float yaw;
float pitch;
float roll;
};
int main() {
AMG_ANGLES struct_data;
struct_data.yaw = 87.96;
struct_data.pitch = -114.58;
struct_data.roll = 100.50;
char* data = new char[sizeof(struct_data)];
for(unsigned int i = 0; i<sizeof(struct_data); i++){
//cout << (char*)(&struct_data+i) << endl;
data[i] = (char*)(&struct_data+i); //Store the bytes of the struct to an array.
}
AMG_ANGLES* tmp = (AMG_ANGLES*)data; //Re-make the struct
cout << tmp.yaw; //Display the yaw to see if it's correct.
}
Quelle: http://codepad.org/xMgxGY9Q
Dieser code scheint nicht zu funktionieren, und ich bin mir nicht sicher, was ich falsch mache.
Wie löse ich dieses?
InformationsquelleAutor der Frage Steven10172 | 2012-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, ich habe mein Problem gelöst mit folgenden code.
ACHTUNG: Dieser code funktioniert nur, wenn das senden und empfangen mit der gleichen endian Architektur.
InformationsquelleAutor der Antwort Steven10172
Tun Sie die Dinge in der falschen Reihenfolge, der Ausdruck
nimmt die Adresse der
struct_data
und steigert es durchi
mal die Größe der Struktur.Versuchen Sie dies:
Dieser wandelt die Adresse von
struct_data
zu einemchar *
und dann fügt der index, und dann wird der dereference-operator (unär*
), um die "Zeichen" an die Adresse.InformationsquelleAutor der Antwort Some programmer dude
Immer nutzen Daten und Strukturen, um Ihre vollen Zügen..
InformationsquelleAutor der Antwort CharLess
InformationsquelleAutor der Antwort Jonas Tepe