文字說明待後續補充
#include <stdio.h>
struct st1
{
unsigned short a:4;
unsigned short b:4;
unsigned short c:4;
unsigned short d:4;
};
struct st2
{
unsigned short e:6;
unsigned short f:6;
unsigned short g:4;
};
int main()
{
unsigned short num = 0x1234;
unsigned char *cp = (unsigned char *) #
// 小端:低位存放在低地址中
if ((*cp) == 0x34){
printf("Little Endian\n");
}
else{
printf("Big Endian\n");
}
printf("\n");
printf("num = 0x%x\n",num);
printf("\n");
printf("*cp = 0x%x\n",*cp);
printf("*cp & 0x0F = 0x%x\n", *cp & 0x0F);
printf("*cp >> 4 = 0x%x\n",*cp >> 4);
printf("\n");
struct st1 *p1 = (struct st1 *) #
printf("*p1 : 0x%x\n",*( (char *) p1 ) );
printf("*p1 & 0x0F : 0x%x\n",(*( (char *) p1 )) & 0x0F );
printf("p1->a = 0x%x\np1->b = 0x%x\np1->c = 0x%x\np1->d = 0x%x\n",p1->a,p1->b,p1->c,p1->d);
printf("\n");
struct st2 *p2 = (struct st2 *) #
printf("*p2 : 0x%x\n",*( (char *) p2 ) );
printf("*p2 & 0x0F : 0x%x\n",(*( (char *) p2 )) & 0x0F );
printf("p2->e = 0x%x\np2->f = 0x%x\np2->g = 0x%x\n",p2->e,p2->f,p2->g);
}
運行結果
Little Endian
num = 0x1234
*cp = 0x34
*cp & 0x0F = 0x4
*cp >> 4 = 0x3
*p1 : 0x34
*p1 & 0x0F : 0x4
p1->a = 0x4
p1->b = 0x3
p1->c = 0x2
p1->d = 0x1
*p2 : 0x34
*p2 & 0x0F : 0x4
p2->e = 0x34
p2->f = 0x8
p2->g = 0x1
其他:
- 結構體位域不能被尋址,例如 &(p1->a) 無法編譯。