Warum ist die Aufzählung mit Bitfeldern in Windows nicht kompatibel?

Ich arbeite an der EBDS-Protokollschnittstelle für Windows und Linux. Ich versuche, alle vom Protokoll benötigten Daten in Strukturen zu packen, dann schreibe ich die Struktur selbst und alle anderen Daten in die serielle Schnittstelle und sende sie an das Gerät.

Der erste Teil des Protokolls ist das Datenpaket, und einer der Teile des Pakets ist das Steuerbyte, das dieser Beschreibung entspricht:

Bit 0: Acknowledgement bit (switchs between 0 and 1 in each send).
Bit 1 to 3: Device Type.
Bit 4 to 6: Message Type.
Bit 7: Unused.

Um dieses Kontrollbyte zu verarbeiten, habe ich zwei Aufzählungen und eine Struktur erstellt:

enum E_DEVICE_TYPE
{
    E_BILL_ACCEPTOR_WITH_SINGLE_ESCROW = 0x0, // 000
    E_RESERVED_1 = 0x1, // 001
    E_RESERVED_2 = 0x2, // 010
    E_RESERVED_3 = 0x3, // 011
    E_RESERVED_4 = 0x4, // 100
    E_RESERVED_5 = 0x5, // 101
    E_RESERVED_6 = 0x6, // 110
    E_RESERVED_7 = 0x7,
};

enum E_MESSAGE_TYPE
{
    E_RESERVED = 0x0,
    E_STANDARD_OMNIBUS_COMMAND = 0x1,
    E_NOT_USED = 0x2,
    E_OMNIBUS_WITH_BOOKMARK_MODE = 0x3,
    E_CALIBRATE_REQUEST = 0x4,
    E_FIRMWARE_DOWNLOAD_REQUEST = 0x5,
    E_AUXILIARY_COMMAND_REQUEST = 0x6,
    E_EXTENDED_COMMANDS = 0x7,
};

#ifndef LINUX
#pragma pack(1)
#endif
struct sControlByte
{
    sControlByte(bool aAcknowledgeFlag, E_DEVICE_TYPE aDeviceType, E_MESSAGE_TYPE aMessageType);

    const bool mACK : 1;
    const E_DEVICE_TYPE mDevice : 3;
    const E_MESSAGE_TYPE mMessageType : 3;
    const bool mUnused : 1;
#ifdef LINUX
}__attribute__((packed));
#else
};
#endif

Wenn ich nach der Größe der sControlByte-Struktur frage, ist der Wert bei der Windows-Kompilierung (Visual Studio 2010) gleich 6, aber unter Linux (mit gcc 4.2.3) ist die Struktur erwartungsgemäß 1.

Ich habe versucht, Ausrichtungen mit den erforderlichen Attributen auf beiden Plattformen zu entfernen, aber ich weiß nicht, was mir fehlt. ¿Warum ändert sich die Größe je nach Plattform? ¿Ich verwende die richtigen Attribute, um die Ausrichtung zu steuern?

Danke im Voraus.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage