C言語のユニオンでエンディアンスワップを実行する方法を理解しようとしています。ユニオンには複数のタイプのデータを保持する機能がありますが、時間。私が理解しようとしているコードは以下のようになります。これはユニオンの定義です:C連合のエンディアンスワップ
union byte4 {
char byte[4];
int numint;
float numfloat;
};
これは関数です。機能において
int endianSwap4int(int a) {
union byte4 un;
un.numint = a;
// swap
char c1 = un.byte[0];
un.byte[0] = un.byte[3];
un.byte[3] = c1;
c1 = un.byte[1];
un.byte[1] = un.byte[2];
un.byte[2] = c1;
return un.numint;
}
、入力a
関数がun.numint
が返される6010を返し、2048327680である場合。私はun.byte
の操作はun.numint
を間接的に操作していることを理解しています。なぜなら、組合は一度に1つのものしか保持できないからです。
共用体のすべてのメンバーは、非常に同じメモリ領域を共有します。彼らはアクセス時にのみ異なる解釈を提供します。バイト配列抽象化により、個々のバイトを簡単にシャッフルできます。同じメモリを参照するため、オーバーレイされた 'int'の値に直接影響します。 –