Union、サイズエンドバイトストレージ
unionの長さは最長メンバーの長さであり、最初のメンバーのみを初期化でき、他のメンバー値は、自身のタイプに応じて最初のメンバーから取得されます.
すなわちunion変数は最初のメンバーに基づいて格納でき,取得方法は多様である.
s小端バイトシーケンスに格納:
ハイローアドレス0 xd 01 s.aの値はここで1バイトの記憶値をとるので、s.a=1
0xc 00
0xb 00
低アドレス0 xa 02
s大端サブシーケンスに格納:
ハイローアドレス0 xd 02 s.aの値はここで1バイトの記憶値をとるのでs.a=2
0xc 00
0 xb 00低アドレス0 xa 01
すなわちunion変数は最初のメンバーに基づいて格納でき,取得方法は多様である.
#include
int main(int argc, char** argv){
union {
char a;
int b;
} s;
s.b =0x02000001;
if(s.a==2){
printf(" %X
", (int)s.a);
}else if(s.a==1){
printf(" %X
", (int)s.a);
}
return 0;
}
s小端バイトシーケンスに格納:
ハイローアドレス0 xd 01 s.aの値はここで1バイトの記憶値をとるので、s.a=1
0xc 00
0xb 00
低アドレス0 xa 02
s大端サブシーケンスに格納:
ハイローアドレス0 xd 02 s.aの値はここで1バイトの記憶値をとるのでs.a=2
0xc 00
0 xb 00低アドレス0 xa 01