我想将Preon用于与用C编写的服务器通信的项目。协议取决于机器的本机endianess(您可以在假设JVM的情况下使用此java.nio.ByteOrder.getNative()
解决具有与服务器相同的字节顺序)并使用uint64_t
表示数据长度,int32_t
表示状态代码(负值表示错误)。
我在Preon文档中找不到有关签名的信息。我快速浏览了源代码,发现nl.flotsam.preon.buffer.DefaultBitBuffer
使用了有符号轮班(<<
和>>
),nl.flotsam.preon.buffer.BitBuffer
中几个方法的javadoc注释也表明它使用有符号整数,但javadoc注释nl.flotsam.preon.buffer.BitBuffer
表示BitBuffer
使用无符号整数。这让我很困惑。
Preon的默认整数格式是什么?我如何代表uint64_t
和int32_t
?
答案 0 :(得分:0)
对于标有@BoundNumber的数据,默认为LittleEndian。您可以覆盖以下内容:
@BoundNumber(byteOrder=BigEndian)
...但目前平台特定不是一种选择。这是一个限制。您可能想考虑为它提交问题。 (否则,我会在将来的某个地方。)
我能看到它的工作方式就是让另一个枚举常量,称为平台。
更新
对于字节顺序,现在Preon(目前仅在头部可用)有三个选项:BigEndian,LittleEndian和Native。 Native将按java.nio.ByteOrder.getNative()指示的字节顺序解析。
因此,现在可以编写如下代码:
@BoundNumber(byteOrder=Native) int value;
...转换为带符号的32位整数,基于架构的字节顺序。