1

所以他们有:

inline uint32 WireFormatLite::EncodeFloat(float value) {
  union {float f; uint32 i;};
  f = value;
  return i;
}

我不明白。我们还没有向i...发送任何价值,那怎么办?这里会发生什么?

4

1 回答 1

1

在联合中,成员的存储重叠。如果两个成员具有相同的大小(即如果可以assert(sizeof(float) == sizeof(uint32))对齐方式,那么您真正要做的是:

  1. 将 a 存储floatf
  2. uint32从 的位置读取 a i这是相同的位置

你同样可以

return *reinterpret_cast<uint32 *>(&value);

(同样,只要您确定两种类型的大小相同,并且具有相同的对齐要求)。

于 2013-06-03T15:59:49.137 回答