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