请帮忙看看这个结构的语法,是C的,第一次看到,怪怪的.
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




