- 论坛徽章:
- 2
|
回复 #1 empty141 的帖子
原帖由 empty141 于 2009-8-28 12:11 发表 ![]()
如果结构体由低地址往高地址存储没有问题,但是如果反过来呢
这个没关系的。
举个endian的例子:
unsigned u = 0x1;
u <<= 1;
无论在little 还是big,都可以认为:
assert( u==0x2 );
假设unsigned是4字节:
unsigned u = 0x1;
0x00, 0x00, 0x00, 0x01 : big
0x01, 0x00, 0x00, 0x00 : little
但是:
u <<= 1, 在big上是左移:
0x00, 0x00, 0x01, 0x00 : big
在little上, 其实是右移:
0x00, 0x01, 0x00, 0x00 : big
在C程序员角度, 只要认为对unsigned 左移是增加, 右移是减少就可以了。
编译器知道目标代码的endian, 会做相应的处理。
对offset也是如此。
从程序员角度看, C中的struct和C++中的POD, 先声明的fields,地址较低。
无论编译器怎么排放, 它会处理好这个事情。 |
|