Van je reactie tot de andere antwoord , je wilt wat er ook is ingepakt in het woord
lid van de vakbond
om te verschijnen in het lid fields.bytesN
. Om dit te bereiken, moet u ofwel een soort van pre-build-proces hebben dat de veld
bitvelden op de juiste manier plaatst na het detecteren van machine-endianness, of 2 structuren creëren, één voor grote endian en de andere voor little endian.
typedef union Status
{
struct fieldsBE
{
uint32_t byteA : 1;//<31>
uint32_t blank : 23;//<30:8>
uint32_t bytesN : 8;//<7:0>
} fieldsBE;
struct fieldsLE
{
uint32_t bytesN : 8;//<7:0>
uint32_t blank : 23;//<30:8>
uint32_t byteA : 1;//<31>
} fieldsLE;
uint32_t word;
};
int main()
{
bool isBigEndian = DetectEndianness();//returns true if big endian
Status status;
status.word = 40;
if( isBigEndian ) {
uint8_t bytesN = status.fieldsBE.bytesN;
} else {
uint8_t bytesN = status.fieldsLE.bytesN;
}
}
Als u slechts weinig endian in uw poort wilt ondersteunen, gebruikt u natuurlijk de lay-out van fieldsLE
in plaats van de originele lay-out die u heeft getoond.