- ベストアンサー
24ビットの変数
はじめまして。 WinXP pro(SP2) VC6.0(SP6) MFC使用です。 とある理由から24bit(3byte)の整数型変数の型を 作っています(仮にINT24とします)。 その変数が満たさなければならない条件として (1)サイズが3バイトである(sizeof(INT24) == 3) (2)INT24 nInt24 = nValue(int型の変数)という形で使える (3)int nValue = nInt24(INT24型の変数)という形で使える というのがあります。 それで、構造体を使用して下のように 定義をしました。 typedef struct tagInt24 { BYTE byData[3]; void operator = (int nValue) { byData[0] = (nValue & 0x0000FF); byData[1] = ((nValue & 0x00FF00) >> 8); byData[2] = ((nValue & 0xFF0000) >> 16); }; }INT24, *LPINT24; これで(1)と(2)は満たせるのですが (3)をどうやって実現するのか悩んでおります。 どなたか知恵をお貸しいただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
operator int() を定義しては?
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
「サイズが 24ビットでなければならない」という理由がよくわかりませんが, operator int() を定義しておけばいいはず.
お礼
ありがとうございました。 episteme さんのお礼の所に書いた とおりにすることで実現できました。 >「サイズが 24ビットでなければならない」という理由がよくわかりませんが #24ビットでなければならないってわけでは ないのですが24ビットのビットマップ画像の ビクセル配列を編修するときにあるとちょっと 便利なんです。
お礼
ありがとうございました。 typedef struct tagInt24 { BYTE byData[3]; void operator = (int nValue) { byData[0] = (nValue & 0x0000FF); byData[1] = ((nValue & 0x00FF00) >> 8); byData[2] = ((nValue & 0xFF0000) >> 16); }; operator int() { return (byData[0] + (byData[1] << 8) + (byData[2] << 16)); }; }INT24, *LPINT24; とすることで実現できました。