オンボード 杉本です。
union ulData
{ unsigned long int ld;
unsigned char uc[4];
}b
b.uc[3]=0x12;
b.uc[2]=0x34;
b.uc[1]=0x56;
b.uc[0]=0x78;
b.ld -- 0x123456
union uiData
{ unsigned int d;
unsigned char uc[2];
}a
a.uc[1]=0x56;
a.uc[0]=0x78;
a.d -- 0x12
ってのが好きです。
char のまま、いきなりシフトですか…
デフォールトが16ビットですからね、
H8ではっ。
>どうぞよろしくお願いいたします。
>
>早速質問なのですが、
>32ビット変数の使い方をご教授いただきたく思っております。
>
>1バイト配列をそれぞれシフトし、32ビットのデータにしたいのですが、
>以下の記述で問題ないでしょうか?
>
>--
>unsigned long uLData; //グローバル
>unsigned int uIData; //グローバル
>unsigned char Data[4];
>
>Data[3] = 0xff;
>Data[2] = 0xff;
>Data[1] = 0xff;
>Data[0] = 0xff;
>
>uLData = (Data[3] << 24) + (Data[2] << 16) + (Data[1] << 8) + Data[0];
>ulData = (Data[3] << 24) + (Data[2] << 16) + (Data[1] << 8) + Data[0];
>--
>
>sprintf、sizeofで確認すると、
>・uLData
> 値 = 0x0000ffff
> サイズ= 0
>
>・uIData
> 値 = 0x0000ffff
> サイズ= 4
>
>と上位16ビットが削れています。
>値が0xffffffffになると思っていたのですが
>何がダメなのでしょうか??
>環境はHEW3を使用しています。
>
>ご教授のほどよろしくおねがいいたします。。