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

Обычно я могу представлять структуры легко в Java с ЮНОЙ, но эта структура использует пользовательские битовые суммы для типов данных (если я не ошибаюсь).

Например, area является short из битов, а не битов, как обычно. flags не хватает бит ... и т. Д.

Как определить структуру JNA с типами данных пользовательских размеров бит?

ответ

1

Объединить два битовых поля в одно поле int, а затем написать методы-члены для извлечения значений для отдельных полей, которые были объединены, например.

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

Возможно, вам потребуется немного поиграть в зависимости от того, как ваш компилятор упаковывает биты.

1

Я не знаю, возможно ли это с помощью JNA. Пожалуйста, просмотрите документацию и посмотрите, можете ли вы найти что-то о своей проблеме.