给出一个假设的结构
struct OUTER {
uint_16 x;
struct INNER{
uint_16 y;
uint_16 z;
} inner_struct;
} outer_struct;
和一个小端机器,如何翻转字节,即outer_struct的字节是什么样的?
假设x,y,z = Ox1234;假设对齐2个字节。
我很困惑
34 12 34 12 34 12 // x y z
和
34 12 12 34 12 34 // x flipped-little_endian_inner_struct
答案 0 :(得分:1)
little endian翻转的唯一内容是内置数据类型中的字节顺序。编译器不能自由地重新排序结构中的属性,并且endian-ness不适用于聚合数据结构(仅适用于它们的组件)。因此,您会在内存中看到34 12 34 12 34 12
作为结果。
答案 1 :(得分:0)
结构成员本身的顺序不会根据编译器中的字节顺序移动。但是,您无法确定结构的任何特定部分占用多少字节,或者编译器在结构的各个部分之间添加了多少填充字节。 (我甚至不确定你是否可以依赖它们处于“声明顺序”这一事实,但我相信标准中有一些内容)。