我有一个问题,我有点被困住了,一位同事告诉我,这将是寻求帮助的好地方。
我正在尝试在Java中实现C风格的位域。这是一个粗略的示例(目前我还没有实际的代码)。
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的旧应用程序进行通信的代码。
我没有重写代码的选择。我知道这种方法不是可移植的,存在字节序问题(以及填充/对齐等),并且如果我能够重写代码,可以采用更好的方法。不幸的是,我需要针对这个非常具体的问题的答案。系统是封闭的,因此我不必担心编译器/操作系统/
ect的每种可能组合。
使用Java EnumSet的方法将行不通,因为我相信这只会将每个值设为一位。我需要能够将d的值打包(例如占用10位)。
我了解Java Bitset,但是它有局限性。我使用的是Java的较旧版本,因此我没有一些较新的Java
Bitset方法(即valueOf方法可能肯定会有所帮助)。
是否有人对如何使其尽可能易于管理有任何想法?我的通讯需要实现10多个位域。
感谢您提供任何帮助!