结构体内bitfield的顺序是对byte endian敏感的。
并不是说x86或MIPS除了byte order之外,还有bit order的区别。
这个问题的根源在于编译器。纯粹是编译器作怪。展开讲话就多了。暂且不表。
不过我可以告诉你一个技巧,如果位域不跨字节的,大小端的变换是有规律的。
像小端模式的一个结构体:
struct abcdef {
int a: 4;
int b: 4;
int c: 4;
int d: 2;
int e: 2;
};
你想让它在MIPS上的gcc编译后有同样的内存布局,方法是:从上到下,位域每8个bit一组,反转组内的成员顺序。结果是这样:
struct abcdef {
int b: 4;
int a: 4;
int e: 2;
int d: 2;
int c: 4;
};
如果位域跨字节,那我就没有办法了。你贴出来的那个struct video什么的代码,我是看不懂的。