• ベストアンサー

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)をどうやって実現するのか悩んでおります。 どなたか知恵をお貸しいただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

operator int() を定義しては?

FAY
質問者

お礼

ありがとうございました。 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; とすることで実現できました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「サイズが 24ビットでなければならない」という理由がよくわかりませんが, operator int() を定義しておけばいいはず.

FAY
質問者

お礼

ありがとうございました。 episteme さんのお礼の所に書いた とおりにすることで実現できました。 >「サイズが 24ビットでなければならない」という理由がよくわかりませんが #24ビットでなければならないってわけでは ないのですが24ビットのビットマップ画像の ビクセル配列を編修するときにあるとちょっと 便利なんです。

関連するQ&A