我一直在努力学习用C原始套接字编程和所遇到的这样的:
unsigned char iph_ihl:5, iph_ver:4;
我感到困惑的是什么':'确实。它甚至做什么?或者它只是变量名称的一部分?
我一直在努力学习用C原始套接字编程和所遇到的这样的:
unsigned char iph_ihl:5, iph_ver:4;
我感到困惑的是什么':'确实。它甚至做什么?或者它只是变量名称的一部分?
您正在查看bitfields。这些定义必须位于一个结构中,并且它们表示iph_ihl
是一个5位字段,而iph_ver
是一个4位字段。
你的例子有点奇怪,因为unsigned char
在大多数机器上是8位类型,但是在那里声明了9位值的字段。
一般而言,位域非常不便携,所以我会建议不要使用它们,但是您可以阅读更多关于它们的信息here。
这是位fields..See this关于C良好的文档位fields..It在内存受限的情况下(例如嵌入式编程)正常使用,紧紧地收拾我们的使用..
重要的一点位域没有地址 - 你不能指向他们或他们的阵列
除了上面提到的答案,你可以看看this一个很好的介绍位字段。有一件事要注意:c
的位域只能用于integer
类型。使用位字段不仅会使您的程序成为non-portable
,它还将成为compiler-dependent
。
这只能用字符来完成吗? – 2012-01-09 04:23:39
您可以使用任何整数类型。 – 2012-01-09 04:24:59
@Hudson:你可以使用'signed int','unsigned int','int'(这取决于实现,可以被视为有符号或无符号)或'bool' /'_Bool'。对任何其他类型的支持都是实现定义的扩展。 – 2012-01-09 04:53:02