[H8-ML(6015)] Re: H8 32ビット変数の使い方について
From: オンボード 杉本 <ob_henry@xxxxxxxxxxxxxxxx>
Date: 2006年08月04日(金)10時51分22秒
 オンボード 杉本です。

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を使用しています。
>
>ご教授のほどよろしくおねがいいたします。。

スレッド概略
[6014(R)](起点)
 └[表示中]
   ├[6018(1)]
   └[6019(2)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]