您的位置:首页 > 其它

关于C的struct结构的几个常见疑问。

2009-07-17 11:20 351 查看
Code:

#include<stdio.h>

struct bit{
unsigned int a0:8;
unsigned int a1:16;
unsigned int a2:8;

unsigned int b;
};

struct bit2
{
unsigned char a0;
unsigned short a1;
unsigned char a2;

unsigned int b;
};

struct nobit
{
unsigned int a;
unsigned int b;
};

int main()
{
struct bit t1;
struct bit2 t3;
struct nobit t2;

unsigned char data[8]={0xA5, 0xCE, 0x12, 0xA5, 0xB0, 0xB1, 0xB2,0xB3};
memcpy( &t1, data, 8);
memcpy( &t2, data, 8);
memcpy( &t3, data, 8);

printf("++ sizeof(t1)=%d, sizeof(t3)=%d, sizeof(t2)=%d \n",
sizeof(t1), sizeof(t3), sizeof(t2) );

printf("++ t1.a0=%2x t1.a1=%4x t2.a2=%2x t1.b=%8x \n", t1.a0, t1.a1, t1
.a2, t1.b);
printf("++ t3.a0=%2x t3.a1=%4x t3.a2=%2x t3.b=%8x \n", t3.a0, t3.a1, t3
.a2, t3.b);
printf("++ t2.a=0x%8x t2.b=%8x \n", t2.a, t2.b);

return 0;
}

//运行结果:<Linux 2.6.18 X86>

++ sizeof(t1)=8, sizeof(t3)=12, sizeof(t2)=8
++ t1.a0=a5 t1.a1=12ce t2.a2=a5 t1.b=b3b2b1b0
++ t3.a0=a5 t3.a1=a512 t3.a2=b0 t3.b=bfb59d7c
++ t2.a=0xa512cea5 t2.b=b3b2b1b0

//结果说明:

1. struct对齐。

2. little_endian.

3.__LITTLE_ENDIAN_BITFIELD (这个测试还看不出来。)

0xA5, 0xCE, 0x12, 0xA5, 0xB0, 0xB1, 0xB2,0xB3

bit: | a0 | a1 | a2 | b |

bit2 | a0 | | a1 | a2 | | b |

nobit| a | b |

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: