DelphiでC言語のビットフィールド

解決


ezra  2018-01-05 21:12:37  No: 48908

もうひとつ質問させてください。

以下のような構造体(共用体?)を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               // 前払いオーダー(ビットマスク用)

/////////////////////////////////////////////////////////////////////////////


通りすがり  2018-01-05 23:47:39  No: 48909

CUST_UNION_HS1はbitHS1とbyHS1の共用体で、さらにbitHS1はビットフィールドになっている、という構造ですね。
C言語を知らないと難しそうに見えますが、単に1バイトのデータを、そのままバイトデータか、フラグ(7つ、うち1つは
2ビット)で表すようにしているだけです。ただDelphiにビットフィールドはない(集合型で同じようなことはできる)のと、
特に使う予定がない構造体ということなので、単に
type
  CUST_UNION_HS1 = packed record
    byHS1: Byte;
  end;
でいいと思います。


ezra  2018-01-06 00:42:02  No: 48910

なるほど!
助かりました。ありがとうございます。


ezra  2018-01-06 00:43:07  No: 48911

解決いたしました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加