次の構造体があるとします。
typedef struct MyStruct {
unsigned short a; /* 16 bit unsigned integer*/
unsigned short b; /* 16 bit unsigned integer*/
unsigned long c; /* 32 bit unsigned integer*/
}MY_STRUCT;
いくつかのデータ配列 (デモンストレーションのみの内容):
unsigned short data[] = {0x0011, 0x1100, 0x0001, 0x0FFF };
次に、次のことを実行します。
MY_STRUCT *ms;
ms = (MY_STRUCT *) data;
printf("a is: %X\n",(*ms).a);
printf("b is: %X\n",(*ms).b);
printf("c is: %X\n",(*ms).c);
データは「左から右」にミリ秒単位で順次読み取られると予想されます。この場合、出力は次のようになります。
a is: 11
b is: 1100
c is: 10FFF
ただし、実際に起こることは次のとおりです。
a is: 11
b is: 1100
c is: FFF0001
なぜこれが起こるのですか?この方法で配列を構造体にキャストすると、どのような動作が予想されますか?