我知道在C语言中,结构体的内存布局可能与代码中不同。例如:
struct a {
short x;
int y;
};
假设使用2字节的short和4字节的int,编译器希望将成员对齐到4字节边界上,因此在内存中实际上可能需要8个字节...所以x和y之间有2个字节的空隙。
这使得在语言、编译器和硬件之间读写结构体不具备可移植性。唯一的方法是逐个成员进行读写。是的,字节序也是一个问题,必须在成员级别上进行交换,但假设这不是一个问题。
Fortran中有一个“sequence”限定符用于派生类型(结构体),告诉编译器按照给定的方式在内存中布置成员。这允许对派生类型进行可移植的读写。
我的问题是:是否有任何方法在C中以可移植(且易于维护)的方式执行类似的操作?
int 0xffffeeff
,并根据ee
的位置在输入时进行字节交换。 - ratchet freak