Compiler befehlen, bestimmte structs in big endian zu verwerten?
-
Hallo!
Ich arbeite derzeit an einer Applikation, welche von einem Gerät objektorientiert verkapselte Daten bekommt.
Die Definitionen der structs habe ich (sind ca. 200 Stück).
Angenommen ich hab ein struct
struct My{
unsigned long a;
unsigned short b;
unsigned char c;
};Gesendet wird vom Gerät das Struct so:
für a: 0xABCDEFCC
für b: 0xABCD
für c: 0xABwenn ich per memcpy die eingelesenen Daten in mein struct kopiere und im Code mit den Daten arbeiten will, stehen die Daten so im Speicher:
für a: 0xCCEFCDAB (d.h. nun in big endian)
für b: 0xCDAB
für c: 0xABd.h. ich habe nur die Bytes korrekt

Mir fällt im Moment keine günstige Lösung ein, wie ich das Problem beheben könnte.
Wären es nur 4-5 Structs könnte ich natürlich für jedes eine kleine Routine basteln, in der die Bytes zu big endian geswapt werden.Allerdings ist das für die 200 structs schon schwerst aufwendig.
Habt ihr vielleicht Ideen?

Irgendeine kleine Deklaration beim struct vlt, die dem Compiler sagt "Achtung - hier big endian"

struct My{ ... } big_endian;

Viele Dank schonmal,
Kevin
-
So was gibt es nicht in ISO C++. Vielleicht bietet dein Compiler eine Erweiterung dafür an (glaube es aber fast nicht).
Ansonsten bleibt dir nichts anderes übrig als nach dem einlesen zu swappen