我在fedora14上进行的编程,意图创建一个结构体内包含两个char类型,分别占用2个位和6个位:
并创建一个数组list[] = "123456789";将list的地址传给int指针,以十六进制打印整数
#include<stdio.h>
#include<stdlib.h>
#pragma pack(1)
struct S{
unsigned char x1:2,
x2:6;};
#pragma pack()
int main()
{
struct S s;
void *i;
char list[10]="123456789";
s.x1 = 0x1;
s.x2 = 0x9;
i = &s;
printf("struct s's size is :%d, number is :%c\n",sizeof(struct S),*(char *)i);
i = list;
printf("list into int is :%x\n",*(int *)i);
}
结果:
struct s's size is :1, number is :%
list into int is :34333231
在ASCII码中%时0x25,换句话说其在存储时是以:0010 0101存储的,x1的数值是01 ,x2的数值是001001,相当于将x1的01直接放于x2再存储
当我将x2的值换为0xA时,打印的字符为')',也就是0x29,由x2的001010 后加上01组成的0010 1001。为小端字节序
在list中,将首地址以int型地址输出整数,结果为34333231对应着4321的ascii码,故是以4个字节为单位,倒序输出的。为小端字节序。