我在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個字節爲單位,倒序輸出的。爲小端字節序。