2016-07-15 38 views
1

Zum Beispiel, ich habe die folgende C++ Struktur ...JNA: Wie kann ich eine Struktur mit Feldern von benutzerdefinierten Bitgrößen definieren?

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 
    */ 
}; 

Normalerweise kann ich Strukturen darstellt leicht in Java mit JNA, aber diese Struktur verwendet Mengen benutzerdefinierte Bits für die Datentypen (wenn ich mich nicht irre).

Zum Beispiel ist area ein short von Bits, anstatt Bits wie üblich. flags ist eine Abkürzung von Bits ... usw.

Wie kann ich eine JNA-Struktur mit Datentypen von benutzerdefinierten Bitgrößen definieren?

Antwort

1

Die zwei Bitfelder in ein einzelnes Feld int zusammenführen und dann Elementmethoden schreiben, um die Werte für die einzelnen Felder zu extrahieren, die kombiniert wurden, z.

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

Je nachdem, wie der Compiler die Bits packt, müssen Sie möglicherweise etwas damit herumspielen.

1

Ich weiß nicht, ob dies mit JNA möglich ist. Bitte sehen Sie sich die Dokumentation an und schauen Sie nach, ob Sie etwas zu Ihrem Problem finden können.