As we know, we have two types of Endianness: big endian and little endian.
Let's say that an integer takes 4 bytes, so the layout of the integer 1 should be 0x01 0x00 0x00 0x00 for little endian and 0x00 0x00 0x00 0x01 for big endian.
To check if a machine is little endian or big endian, we can code as below:
int main()
{
    int a = 1;
    char *p = (char *)&a;
    // *p == 1 means little endian, otherwise, big endian
    return 0;
}
As my understanding, *p is assigned with the first octet: 0x01 for little endian and 0x00 for big endian (the two bold parts above), that's how the code works.
Now I don't quite understand how bit field works with different Endianness.
Let's say we have such a struct:
typedef struct {
    unsigned char a1 : 1;
    unsigned char a2 : 1;
    unsigned char a6 : 3;
}Bbit;
And we do the assignment as below:
Bbit bit;
bit.a1 = 1;
bit.a2 = 1;
Will this piece of code be implementation specific? I'm asking if the values of bit.a1 and of bit.a2 are 1 on little endian and are 0 on big endian? Or are they definitely 1 regardless of the different Endianness?
 
     
     
    