Implementacja bitfielda w stylu C w Javie

Mam problem, że jestem trochę utknięty i zostałem poinformowany przez kolegę, że byłoby to dobre miejsce do szukania pomocy.

Usiłuję zaimplementować bitfield w stylu C w Javie. Oto szorstki przykład (nie mam w tej chwili rzeczywistego kodu).

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;

Mam trochę bitów podobnych stylów ze starszego kodu. Powodem, dla którego muszę wymyślić równoważną metodę dla Javy, jest to, że pracuję nad kodem, który użyje Javy do komunikacji z innymi starszymi aplikacjami za pomocą UDP.

Nie mam możliwości przepisania kodu. Zdaję sobie sprawę, że takie podejście nie jest przenośne, ma problemy z endianizmem (i padding / alignment, ect) i może być zrobione lepiej, gdybym mógł przepisać kod. Niestety potrzebuję odpowiedzi na ten bardzo konkretny problem. System jest zamknięty, więc nie muszę się martwić o każdą możliwą kombinację kompilatorów / systemów operacyjnych / ect.

Podejście polegające na użyciu Java EnumSet nie będzie działać, ponieważ uważam, że pozwoli tylko na jedną wartość. Muszę być w stanie spakować wartości, na przykład wartość d zajmującą 10 bitów.

Wiem o Java Bitset, ale ma ograniczenia. Używam starszej wersji Java, więc nie mam niektórych nowszych metod Java Bitset (mianowicie metod valueOf, które prawdopodobnie z pewnością pomogą).

Czy ktoś ma jakieś pomysły, jak uczynić to tak łatwym w zarządzaniu, jak to możliwe? Mam ponad 10 bitfieldów, które muszę zaimplementować dla mojej komunikacji.

Dziękuje za każdą pomoc którą możecie zapewnić!

questionAnswers(4)

yourAnswerToTheQuestion