- 論壇徽章:
- 2
|
回復(fù) #1 empty141 的帖子
原帖由 empty141 于 2009-8-28 12:11 發(fā)表 ![]()
如果結(jié)構(gòu)體由低地址往高地址存儲(chǔ)沒(méi)有問(wèn)題,但是如果反過(guò)來(lái)呢
這個(gè)沒(méi)關(guān)系的。
舉個(gè)endian的例子:
unsigned u = 0x1;
u <<= 1;
無(wú)論在little 還是big,都可以認(rèn)為:
assert( u==0x2 );
假設(shè)unsigned是4字節(jié):
unsigned u = 0x1;
0x00, 0x00, 0x00, 0x01 : big
0x01, 0x00, 0x00, 0x00 : little
但是:
u <<= 1, 在big上是左移:
0x00, 0x00, 0x01, 0x00 : big
在little上, 其實(shí)是右移:
0x00, 0x01, 0x00, 0x00 : big
在C程序員角度, 只要認(rèn)為對(duì)unsigned 左移是增加, 右移是減少就可以了。
編譯器知道目標(biāo)代碼的endian, 會(huì)做相應(yīng)的處理。
對(duì)offset也是如此。
從程序員角度看, C中的struct和C++中的POD, 先聲明的fields,地址較低。
無(wú)論編譯器怎么排放, 它會(huì)處理好這個(gè)事情。 |
|