プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

operator int() を定義しては?

    • good
    • 0
この回答へのお礼

ありがとうございました。
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;

とすることで実現できました。

お礼日時:2004/09/17 17:01

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

.
    • good
    • 0
この回答へのお礼

ありがとうございました。
episteme さんのお礼の所に書いた
とおりにすることで実現できました。

>「サイズが 24ビットでなければならない」という理由がよくわかりませんが

#24ビットでなければならないってわけでは
ないのですが24ビットのビットマップ画像の
ビクセル配列を編修するときにあるとちょっと
便利なんです。

お礼日時:2004/09/17 17:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A