Реализация битового поля в стиле 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 битовых полей, которые мне нужно реализовать для моих коммуникаций.

Спасибо за любую помощь, вы можете предоставить!

Ответы на вопрос(4)

Ваш ответ на вопрос