2016-07-15 6 views
1

例えば、私は、次のC++構造を持っている...私は間違っていない場合JNA:どのようにカスタムビットサイズのフィールドを持つ構造体を定義できますか?

struct dleaf_t 
{ 
    int     contents;   // OR of all brushes (not needed?) 
    short    cluster;   // cluster this leaf is in 
    short    area : 9;   // area this leaf is in 
    short    flags : 7;   // flags 
    short    mins[ 3 ];   // for frustum culling 
    short    maxs[ 3 ]; 
    unsigned short  firstleafface;  // index into leaffaces 
    unsigned short  numleaffaces; 
    unsigned short  firstleafbrush;  // index into leafbrushes 
    unsigned short  numleafbrushes; 
    short    leafWaterDataID; // -1 for not in water 

    //!!! NOTE: for maps of version 19 or lower uncomment this block 
    /* 
    CompressedLightCube ambientLighting; // Precaculated light info for entities. 
    short   padding;  // padding to 4-byte boundary 
    */ 
}; 

通常(私はJNAとJavaで簡単な構造を表現することができますが、この構造はデータ型のカスタムビット量を使用しています)。例えば

areashort のビットではなく、通常のようにビットです。 flagsは、ビット...などの短いです。

カスタムビットサイズのデータ​​タイプでJNA構造を定義するにはどうすればよいですか?

答えて

1

2つのビットフィールドを1つのintフィールドにマージし、結合された個々のフィールドの値を抽出するメンバーメソッドを記述します。

public int area_flags; 
public int getArea() { return area_flags & 0x1FF; } 
public int getFlags() { return (area_flags >> 9) & 0x3F; } 

コンパイラがビットをどのようにパックしているかによって、多少の違いがあります。

1

これがJNAで可能かどうかわかりません。ドキュメントを見て、あなたの問題について何かを見つけることができるかどうかを見てください。

関連する問題