Реализация битового поля в стиле C в Java
У меня есть проблема, на которой я немного застрял, и коллега сообщил мне, что это было бы хорошим местом для обращения за помощью.
Я пытаюсь реализовать битовое поле в стиле C в Java. Вот грубый пример (у меня нет реального кода передо мной в данный момент).
typedef union
{
typedef struct
{
unsigned short a :1;
unsigned short b :1;
unsigned short c :2;
unsigned short d :10;
} bitfield;
unsigned short bitmap;
}example_bitfield;
У меня есть немного битовых полей аналогичного стиля из старого кода. Причина, по которой мне нужно придумать эквивалентный метод для Java, заключается в том, что я работаю над кодом, который будет использовать Java для взаимодействия с другими устаревшими приложениями, использующими UDP.
У меня нет возможности переписать код. Я знаю, что этот подход не переносим, имеет проблемы с порядком байтов (и дополнением / выравниванием и т. Д.), И его можно было бы сделать лучше, если бы я мог переписать код. К сожалению, мне нужен ответ на эту очень специфическую проблему. Система закрыта, и поэтому мне не нужно беспокоиться о каждой возможной комбинации компиляторов / операционных систем / т. Д.
Подход с использованием Java EnumSet не будет работать, потому что я считаю, что для каждого значения будет только один бит. Мне нужно иметь возможность упаковывать значения, например, со значением d, занимающим 10 бит.
Я знаю о Java Bitset, но у него есть ограничения. Я использую более старую версию Java, и поэтому у меня нет некоторых более новых методов Java Bitset (а именно методов valueOf, которые наверняка наверняка помогут).
У кого-нибудь есть идеи, как сделать это максимально управляемым? У меня есть более 10 битовых полей, которые мне нужно реализовать для моих коммуникаций.
Спасибо за любую помощь, вы можете предоставить!