Целые числа без знака и без знака в Preon - PullRequest
1 голос
/ 22 августа 2010

Я хочу использовать Preon для проекта, который взаимодействует с сервером, написанным на C. Протокол зависит от собственного порядкового номера машины (вы можете решить с помощью этого java.nio.ByteOrder.getNative() при условии, что JVMимеет тот же порядковый номер, что и на сервере) и использует uint64_t для длин данных и int32_t для кодов состояния (отрицательное значение указывает на ошибку).

Я не смог найти информацию о подписи в документации Preon,Я быстро взглянул на исходный код и обнаружил, что nl.flotsam.preon.buffer.DefaultBitBuffer использует знаковые сдвиги (<< и >>), а комментарии javadoc к нескольким методам в nl.flotsam.preon.buffer.BitBuffer также указывают, что он использует целые числа со знаком, но комментарий javadocnl.flotsam.preon.buffer.BitBuffer говорит, что BitBuffer использует целые числа без знака.Это меня смутило.

Какой формат целых чисел по умолчанию Preon?Как мне представить uint64_t и int32_t?

1 Ответ

0 голосов
/ 23 августа 2010

Для данных, помеченных @BoundNumber, по умолчанию используется LittleEndian.Вы можете переопределить, как это:

@BoundNumber(byteOrder=BigEndian)

… но для конкретной платформы в настоящее время не вариант.Это ограничение.Возможно, вы захотите рассмотреть вопрос о регистрации проблемы для него.(В противном случае, я сделаю это где-нибудь в будущем.)

Я мог бы увидеть, как это работает, просто иметь другую константу перечисления, называемую Платформой.

Обновление:

Для порядка следования байтов Preon сейчас (в настоящее время доступен только в заголовке) имеет три варианта: BigEndian, LittleEndian и Native.Native разрешается в порядке байтов, указанном в java.nio.ByteOrder.getNative ().

Как следствие, теперь можно написать код, подобный этому:

@BoundNumber(byteOrder=Native) int value;

… которыйпереводится в 32-разрядное целое число со знаком с порядком байтов на основе архитектуры.

...