unsigned int h_len:4 这种语法以前没见过

asskisser 2005-04-05 04:58:21
typedef struct tagIP_HEADER
{
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;
} IP_HEADER;
----------------------------------------------------------------------------
定义协议的头的时候经常碰到这样的定义,请问怎么赋值给h_len和version?
...全文
278 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonatcs 2005-04-13
  • 打赏
  • 举报
回复
以前上学的时候学的是第二版,但我买的是第一版的旧书,好像都没有讲。
不过今天翻了翻第三版,还真有这一节:12.3 位段
kobefly 2005-04-06
  • 打赏
  • 举报
回复
位域
yxxng 2005-04-06
  • 打赏
  • 举报
回复
老谭的书上在位域那章讲过。你可以看一下。
Flood1984 2005-04-06
  • 打赏
  • 举报
回复
赋值和使用平常的变量是一样的,
不同的就是值的取值范围改变了。
leonatcs 2005-04-06
  • 打赏
  • 举报
回复
那h_len和version谁是高四位谁是低四位呢?
wander1234 2005-04-06
  • 打赏
  • 举报
回复
unsigned int h_len:4; // length of the header
unsigned int version:4; // Version of IP
表示4个位段,你可以IP_HEADER tagIP;
tagIP.h_len = 15;//15的2进制是1111,你可以这样赋值
zmfang 2005-04-06
  • 打赏
  • 举报
回复
把h_len和version看作一个字节,位与0xFF得到version,右移四位再位与0xFF得到h_len
senhanxiao 2005-04-06
  • 打赏
  • 举报
回复
有的书上又叫位段,为了节约空间
arrowcy 2005-04-05
  • 打赏
  • 举报
回复
恩,大家都说了,就是位域,主要是为了节约空间
oyljerry 2005-04-05
  • 打赏
  • 举报
回复
位,表示只取4bit
pcboyxhy 2005-04-05
  • 打赏
  • 举报
回复
书还是要看的
直接学VC是不可能学好的
winstonch 2005-04-05
  • 打赏
  • 举报
回复 1
这是位域,
unsigned int h_len:4;是定义h_len只在4个bit,这只能出现在结构体中。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧