Ich habe folgendes Problem: ich will eine Struktur anlegen, und diese dann Byte für Byte genau so im Speicher wiederfinden, wie sie im Quellcode steht.
Beispiel:
Code: Alles auswählen
struct A {
char a;
double b;
int c;
short d[7];
};
Code: Alles auswählen
struct A s;
char a = * (char *) &s;
double b = *(double*) ((char *)&s + sizeof(char));
int c = *(int*) ((char *)&s + sizeof(char) + sizeof(double));
short d[7];
memcpy(d, ((char *)&s + sizeof(char) + sizeof(double) + sizeof(int)), sizeof(short)*7);
Bitte beachtet, ich will _nicht_ alignof() oder offsetoff() verwenden.
Warum der ganze Spaß?
Es geht darum, eine wohldefinierte Struktur über das Netzwerk zu verschicken. Leider ist das Speicher-Layout der Struktur in C/C++ nicht festgeschrieben, das heißt ich kann nicht einfach &s mit der länge sizeof(A) verschicken.
Was ich jetzt machen muss: Ich muss zusätzlichen Speicher anfordern, und dort manuell die Daten an die richtige Stelle schreiben. Ich hoffe, das geht besser.
Weiß jemand wie ich das erreichen kann, ohne mich in Compileroptionen und #pragma's zu verlieren?
Das ganze sollte am liebsten ganz Standard-C++ sein (C++11!) oder zumindest auf Clang, GCC und Microsoft C++ funktionieren.
Hat jemand Ideen?