LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 991|回复: 15

关于数据类型奇怪的问题

[复制链接]
发表于 2004-12-10 15:00:57 | 显示全部楼层 |阅读模式
typedef struct                       /**** BMP file header structure ****/
    {
    unsigned short bfType;           /* Magic number for file */
    unsigned int   bfSize;           /* Size of file */
    unsigned short bfReserved1;      /* Reserved */
    unsigned short bfReserved2;      /* ... */
    unsigned int   bfOffBits;       /* Offset to bitmap data */
    } BITMAPFILEHEADER;
printf("The size of BITMAPFILEHEADER :%d %d",sizeof(BITMAPFILEHEADER),\
sizeof(unsigned short)+\
sizeof(unsigned int)+\
sizeof(unsigned short)+\                                   sizeof(unsigned short)+\
sizeof(unsigned int));
问题是既然得出两个不同的结果:16与14,显然14是正确的,为什么?
 楼主| 发表于 2004-12-10 15:07:37 | 显示全部楼层
我的编译环境是MiniGW
发表于 2004-12-10 17:56:52 | 显示全部楼层
对齐
 楼主| 发表于 2004-12-10 19:37:03 | 显示全部楼层
怎么对齐?那里需要对齐!请教!
 楼主| 发表于 2004-12-10 21:02:05 | 显示全部楼层
如果我要正确的将各个分量写屏,如何输出?不胜感激!
发表于 2004-12-10 21:48:51 | 显示全部楼层
最初由 lucifer 发表
对齐
意思是要你正确缩进
加code
是吗?
发表于 2004-12-10 22:04:48 | 显示全部楼层
最初由 nait 发表
意思是要你正确缩进
加code
是吗?

你的理解还真是别具特色,与众不同!
发表于 2004-12-11 07:28:59 | 显示全部楼层
google data structure Alignment

为了达到最优的效果,编译器会在structure里面添加padding,保证
数据的对齐
发表于 2004-12-11 07:56:17 | 显示全部楼层
这步奇怪.系统更喜欢16,哈哈,优化了.
不过这也无伤大雅阿.
反正不会影响你输出每个分量.
 楼主| 发表于 2004-12-11 09:23:33 | 显示全部楼层
怎么不影响?
BITMAPHEADER bfHeader
printf("bfType        : %c\n",bfHeader.bfType_1);
       
        printf("bfSize        : %u\n",bfHeader.bfSize_1);
        printf("bfReserved1   : %u\n",bfHeader.bfReserved1_1);
        printf("bfReserved2   : %u\n",bfHeader.bfReserved2_1);
        printf("bfOffBits     : %u\n",bfHeader.bfOffBits_1);
结果是错误的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表