オンボード 杉本です。 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を使用しています。 > >ご教授のほどよろしくおねがいいたします。。