Предварительное декодирование, а затем кодирование не возвращает один и тот же массив байтов

Я использую Preon для кодирования полей перечисления в массиве байтов.

Поля первого байта (пример-байт: 0xf7=1111 01 11) настроены следующим образом:

@BoundNumber(size="2") //Corresponds to 11
private byte b1_1_notUsed;

@BoundNumber(size="2") //Corresponds to 01
private ParkingBrakeSwitch parkingBrakeSwitch;

@BoundNumber(size="4")
private byte b1_3_notUsed; //Corresponds to 1111

Декодирование работает нормально, поэтому я ожидаю, что кодирование декодированного объекта обратно в массив байтов даст тот же массив байтов, который у меня был с самого начала. Однако это не так. Вместо этого биты в первом байте кодируются следующим образом:

0xdf=11 01 1111

То есть сегменты кодируются в обратном порядке! Почему декодирование-кодирование не возвращает один и тот же массив байтов? Что мне нужно сделать? Есть ли какая-то аннотация заказа, которую мне не хватает?

Спасибо за ответ, потому что документации Preon кажется мало!


person JohnyTex    schedule 30.12.2013    source источник


Ответы (1)


Вопрос решен.

Описывающий класс не учитывал порядок байтов. По глупости я не считал порядок байтов проблемой битов в самом байте. Но это, очевидно, так:

Пример байта: 0xf7=1111 01 11 (Big Endian: сначала MSB)

@BoundNumber(size="4", byteOrder=ByteOrder.BigEndian) //Corresponds to 1111
private byte b1_3_notUsed;

@BoundNumber(size="2", byteOrder=ByteOrder.BigEndian) //Corresponds to 01
private ParkingBrakeSwitch parkingBrakeSwitch;

@BoundNumber(size="2", byteOrder=ByteOrder.BigEndian) //Corresponds to 11
private byte b1_1_notUsed;

Теперь кодирование снова возвращает 0xf7=1111 01 11, когда оно было перекодировано.

person JohnyTex    schedule 02.01.2014