C語言的STRUCT提供了一種叫bit field的語法,可以根據需要決定成員占用某字節的從X位到Y位,例如,下面一個結構:
struct tagtest
{
???char a:4;
?? char b:2;
?? char c:2;
};
這個定義的含義是整個結構是一個字節長度,成員a占4位,b占2位,c占2位。這樣定義以后,我們可以方便的通過設置成員的值來設置結構,而不需要進行位操作了。例如:
tagtest myTest;
myTest.a = 10;
myTest.b = 2;
myTest.c = 1;
但今天發現一個問題,就是windows系統上的和MAC上對待這個結構是不同的;現象如下:
如果在windows上這是上面的值,在MAC上得到的結構成員值為:
myTest.a = 6;myTest.b = 2;myTest.c = 2;
仔細分析之后覺得這個不是字節序的問題,因為字節序對一個字節是不起作用的,如果起作用那傳輸數據就麻煩了了;那么是什么問題導致的呢?
應該是編譯器造成的,規律如下:
在WINDOS上,編譯器認為c是字節的高位,而a是字節的低位;但MAC上正好相反了;a 是字節的低位,c是字節的低位。
緊記在心!!!