我一直在努力學習用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