CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请帮忙看看这个结构的语法,是C的,第一次看到,怪怪的.

楼主xory001(刺猬)2005-04-09 21:32:16 在 VC/MFC / 基础类 提问

typedef   struct   iphdr  
  {  
  unsigned   int   h_len:4;                     //   length   of   the   header    
  unsigned   int   version:4;                 //   Version   of   IP    
  unsigned   char   tos;                           //   Type   of   service    
  unsigned   short   total_len;             //   total   length   of   the   packet    
  unsigned   short   ident;                     //   unique   identifier    
  unsigned   short   frag_and_flags;   //   flags    
  unsigned   char     ttl;      
  unsigned   char   proto;                       //   protocol   (TCP,   UDP   etc)    
  unsigned   short   checksum;               //   IP   checksum    
  unsigned   int   sourceIP;    
  unsigned   int   destIP;    
  }IpHeader;    
  _____________  
  这是从MSDN中的一个源程序ping.c中拷贝出来的,编译运行都成功了.  
  对于unsigned   int   h_len:4;    
      unsigned   int   version:4;  
   
  这两行看不懂,  
  谁能解释一下,谢谢. 问题点数:50、回复次数:14Top

1 楼steedhorse(晨星)回复于 2005-04-09 21:37:01 得分 20

位段。看看谭浩强的《C程序设计》吧。  
  表示h_len和version合占一个byte的四个bit。Top

2 楼steedhorse(晨星)回复于 2005-04-09 21:38:18 得分 0

sorry,打错字了,“合占”改成“各占”。  
  谬以千里了。-_-  
   
  以前内存比较紧张的年代,位段是很受欢迎的。  
  不过在现在VC这种编译器上,肯定都优化成一个字节了。Top

3 楼applefeng(天雪)回复于 2005-04-09 22:10:39 得分 0

呵呵~  
  yes,完全同意上一层.Top

4 楼danfeng(丹枫)回复于 2005-04-09 22:24:01 得分 0

re楼上Top

5 楼everandforever(Forever)回复于 2005-04-09 23:44:33 得分 20

VC编译器说优化它就敢优化成一个字节吗。他要是敢把unsigned   int   h_len:4;优化成一个字节我就告微软去。Top

6 楼steedhorse(晨星)回复于 2005-04-10 00:20:51 得分 5

哦,刚才试验一下,的确没有这样的优化。  
  以前从别人那里看到的,没有试验就相信了,喊。  
  向搂住说sorry了。  
   
  谢谢everandforever(Forever)指出,否则就真正误导人了。-_-Top

7 楼xuzheng318(忧郁王子)回复于 2005-04-10 01:06:02 得分 0

晨星说得对!帮顶!Top

8 楼kernet(人生若只如初见,何事秋风悲画扇)回复于 2005-04-10 01:58:30 得分 0

呵呵,上面的结构好像见过。  
  顶UPTop

9 楼xory001(刺猬)回复于 2005-04-10 07:10:09 得分 0

他要是敢把unsigned   int   h_len:4;优化成一个字节我就告微软去。  
    ???  
   
   
  不是一个字节?  
  而是4个?Top

10 楼xgwlove(光光)回复于 2005-04-10 14:49:01 得分 5

其实就是内存对齐的问题,建议   找一下,很多这方面的文章.Top

11 楼steedhorse(晨星)回复于 2005-04-10 14:52:50 得分 0

To:xory001(刺猬)  
   
  不是,是我说错了,根本没有优化,还是半个字节,h_len和version共占了一个字节。Top

12 楼tanyaliji(努力学习.net)(★)回复于 2005-04-10 15:25:32 得分 0

这样的问题多讨论一下还是不错地.Top

13 楼daymist(土狼)回复于 2005-04-10 16:26:12 得分 0

有点意思Top

14 楼xory001(刺猬)回复于 2005-04-12 11:23:45 得分 0

我知道什么意思了,因为ip头他的版本号和长度都是4位,故这样写.其实也可以定义个BYTE,直接赋值也是可以的,就是不知道会不会被优化.  
   
  对了,楼上的各位,怎么看有没有被优化过啊?Top

相关问题

  • 数据结构,c的语法用vb.net怎么写啊
  • C#语法String
  • 求C#语法
  • 刚开始用C++ Buider,觉得怪怪的。
  • 求教:请问C#是不是和JAVA的语法结构差不多?
  • C++ 语法请教
  • c语法问题
  • c++ 语法问题
  • c#语法问题
  • c#语法问题

关键词

  • 优化
  • ip
  • unsigned
  • len
  • 优化成
  • short
  • version
  • char

得分解答快速导航

  • 帖主:xory001
  • steedhorse
  • everandforever
  • steedhorse
  • xgwlove

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo