配列から単一の算術演算型への単一項目のキャスト(またはより多くの参照解除)を行うと、奇妙な動作に直面しています。配列のキャストの内容をCの算術型にキャスト
相続人減少したテストケース:具体的には
void test1()
{
unsigned char test[10] = {0};
unsigned long i=0xffffffff;
*((unsigned long *)(&test[3])) = i;
int it;
for (it = 0 ; it < 10 ; it++)
{
printf("%02x ", test[it]);
}
}
void test2()
{
unsigned char test[10] = {0};
unsigned char test2[10] = {0};
test[2]=0xFF;
test[3]=0xFF;
*((unsigned short *)(&test2[1])) = *((unsigned short *)(&test[2]));
int it;
for (it = 0 ; it < 10 ; it++)
{
printf("%02x ", test2[it]);
}
}
それは主にこの表現である:
*((unsigned short *)(&test2[1]))
私はいくつかの他のプラットフォーム(PIC24のような主に組み込みプラットフォーム)上でアクセス違反を取得しています。
私の質問は次のとおりです。このC準拠ですか?私はC標準の中で何かを見つけることができませんが、おそらく私は目が見えません。
このようなキャストなしで(バイト単位のコピー/アンローリングのルーピングなどは意味しません)、この操作を実行する代替手段を知っていますか?プラットフォームの現在のバイトオーダーを知る必要はありません。
ありがとうございます!
わかりましたが、時には本当に奇妙なことをする必要があります.Cがあなたにそれをさせるのは良いことです。私は通常、そのようなことで 'union'を好むことはありますが、ポインタキャストよりはるかにクリーンな解決策です。 – cha0site