Я пытался читать uint32 на Java.Я делаю это хорошо
byte[] record=new byte[4];
bBuff.get(record,0,4);
recordData = ((record[3] & 0xFF) << 24) | ((record[2] & 0xFF) << 16) | ((record[1] & 0xFF) << 8) | (record[0] & 0xFF);
, но этот uint32 имеет специальную структуру. В документации пишите
TTTR record, structured as follows (MSBit at the left):
Reserved[1], Valid[1], Route[2], Data[12], TimeTag[16]
If Valid==1
then Data = Channel
else Data = Overflow[1], Reserved[8], Marker[3]
в C-коде.Это имеет структуру структуры.
struct {
unsigned TimeTag :16;
unsigned Channel :12;
unsigned Route :2;
unsigned Valid :1;
unsigned Reserved :1; } TTTRrecord;
То, что я делал в Java:
timeTag= recordData & 65535;
channel = (recordData>> 16) & 0x800;
route = (recordData>> 28) & 2;
valid = (recordData>> 30) & 1;
reserved = (recordData>> 31) & 1;
Но это похоже на магию.Все работает нормально, но не совсем.Но я получаю 1 маршрут вместо 2. Как будто второй маршрут отключен.Возможно, у меня есть некоторые проблемы с битовым представлением маршрута.