结构中结构的小端点

时间:2013-05-02 17:26:10

标签: c++ struct padding endianness

给出一个假设的结构

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

2 个答案:

答案 0 :(得分:1)

little endian翻转的唯一内容是内置数据类型中的字节顺序。编译器不能自由地重新排序结构中的属性,并且endian-ness不适用于聚合数据结构(仅适用于它们的组件)。因此,您会在内存中看到34 12 34 12 34 12作为结果。

答案 1 :(得分:0)

结构成员本身的顺序不会根据编译器中的字节顺序移动。但是,您无法确定结构的任何特定部分占用多少字节,或者编译器在结构的各个部分之间添加了多少填充字节。 (我甚至不确定你是否可以依赖它们处于“声明顺序”这一​​事实,但我相信标准中有一些内容)。