もうひとつ質問させてください。
以下のような構造体(共用体?)をDelphiで定義するとどのようになるのでしょうか?
ビットフィールドという使い方のようですがDelphiでも使えるのでしょうか?
仮にDelphiで定義できないとしても、これはある関数を実行するとセットされる構造体の一部なのですが、ここにセットされる値は使用しません。
できれば「領域だけ確保しておく」みたいな定義の仕方ができればよいのですが...
どうかご助言をよろしくお願い致します。
/////////////////////////////////////////////////////////////////////////////
typedef union{
struct{
unsigned char bit0 :1;
unsigned char bit12:2;
unsigned char bit3 :1;
unsigned char bit4 :1;
unsigned char bit5 :1;
unsigned char bit6 :1;
unsigned char bit7 :1;
}bitHS1;
BYTE byHS1;
}CUST_UNION_HS1;
#define CUST_HS1_ORDER uHS1.bitHS1.bit0 // オーダー種別(0:新規、1:追加)
#define CUST_HS1_DENSO uHS1.bitHS1.bit12 // 伝送種別(00:通常伝送、01:仮伝送、11:本伝送)
#define CUST_HS1_KAIKEI uHS1.bitHS1.bit6 // 会計フラグ(0:未会計、1:会計済)
#define CUST_HS1_MAEBARAI uHS1.bitHS1.bit7 // 前払いオーダー(0:無効、1:有効)
#define CUST_HS1_MSK_ORDER 0x01 // オーダー種別 (ビットマスク用)
#define CUST_HS1_MSK_DENSO 0x06 // 伝送種別 (ビットマスク用)
#define CUST_HS1_MSK_KAIKEI 0x40 // 会計フラグ (ビットマスク用)
#define CUST_HS1_MSK_MAEBARAI 0x80 // 前払いオーダー(ビットマスク用)
/////////////////////////////////////////////////////////////////////////////
CUST_UNION_HS1はbitHS1とbyHS1の共用体で、さらにbitHS1はビットフィールドになっている、という構造ですね。
C言語を知らないと難しそうに見えますが、単に1バイトのデータを、そのままバイトデータか、フラグ(7つ、うち1つは
2ビット)で表すようにしているだけです。ただDelphiにビットフィールドはない(集合型で同じようなことはできる)のと、
特に使う予定がない構造体ということなので、単に
type
CUST_UNION_HS1 = packed record
byHS1: Byte;
end;
でいいと思います。
なるほど!
助かりました。ありがとうございます。
解決いたしました。
ツイート | ![]() |