Implementing a C style bitfield in Java
Class Struct from Javolution library makes what you need (http://www.javolution.org/apidocs/index.html?javolution/io/Struct.html) See "Clock" example:
import java.nio.ByteBuffer;
class Clock extends Struct { // Hardware clock mapped to memory.
Unsigned16 seconds = new Unsigned16(5); // unsigned short seconds:5
Unsigned16 minutes = new Unsigned16(5); // unsigned short minutes:5
Unsigned16 hours = new Unsigned16(4); // unsigned short hours:4
Clock() {
setByteBuffer(Clock.nativeBuffer(), 0);
}
private static native ByteBuffer nativeBuffer();
}
Since UDP accepts only byte arrays, you can declare a Java class in any suitable way and the only critical step is to define its serialization and deserialization methods:
class example_bitfield {
byte a;
byte b;
byte c;
short d;
public void fromArray(byte[] m) {
byte b0=m[0];
byte b1=m[1];
a=b0>>>7;
b=(b0>>6)&1;
c=(b0>>4)&3;
d=(b0&0xF<<6)|(b1>>>2);
}
public void toArray(byte[] m) {
m[0]=(a<<7)|(b<<6)|(c<<4)|(d>>>6);
m[1]=(d&0x3F)<<2;
}
}