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ć!