Sto imparando l'unione e la struttura e ho scritto il codice qui sotto. Quello che non capisco è perché l'output è diverso quando cambio da un piccolo endian ad un big endian.
La mia comprensione è che endianness è importante quando hai più di un byte. Ma ho solo 8 bit.
Questo codice non è portatile in questo momento e voglio capire come renderlo portatile. Vorrei evitare di rilevare l'endianness o l'utilizzo di tecniche di spostamento dei bit. Conosco le funzioni di htonX ma non penso che si applichi qui.
#include <stdio.h>
int main()
{
typedef union {
struct {
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
} bits;
unsigned char byte;
} HW_Register;
HW_Register reg;
reg.byte = 3;
printf("%d %d %d %d %d %d %d %d\n",
reg.bits.b0,
reg.bits.b1,
reg.bits.b2,
reg.bits.b3,
reg.bits.b4,
reg.bits.b5,
reg.bits.b6,
reg.bits.b7);
printf("%d\n",reg.byte);
printf("Size of reg.byte: %d\n", sizeof(reg.byte));
}