したがって、次のようになります。
inline uint32 WireFormatLite::EncodeFloat(float value) {
union {float f; uint32 i;};
f = value;
return i;
}
そして、私はそれを取得しません。値を送信していませんi
...では、どうやって?そこで何が起こるの?
したがって、次のようになります。
inline uint32 WireFormatLite::EncodeFloat(float value) {
union {float f; uint32 i;};
f = value;
return i;
}
そして、私はそれを取得しません。値を送信していませんi
...では、どうやって?そこで何が起こるの?
ユニオンでは、メンバーのストレージが重複しています。2 つのメンバーが同じサイズ (つまり、可能であればassert(sizeof(float) == sizeof(uint32))
)で配置されている場合、実際に行っていることは次のとおりです。
float
の場所にa を格納します。f
uint32
場所からa を読み取りますi
あなたも同じように
return *reinterpret_cast<uint32 *>(&value);
(繰り返しますが、両方の型が同じサイズであり、配置要件も同じであることが確実である限り)。