Preon中签名和无符号整数

时间:2010-08-22 11:28:23

标签: java 64-bit integer unsigned preon

我想将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_tint32_t

1 个答案:

答案 0 :(得分:0)

对于标有@BoundNumber的数据,默认为LittleEndian。您可以覆盖以下内容:

@BoundNumber(byteOrder=BigEndian)

...但目前平台特定不是一种选择。这是一个限制。您可能想考虑为它提交问题。 (否则,我会在将来的某个地方。)

我能看到它的工作方式就是让另一个枚举常量,称为平台。

更新

对于字节顺序,现在Preon(目前仅在头部可用)有三个选项:BigEndian,LittleEndian和Native。 Native将按java.nio.ByteOrder.getNative()指示的字节顺序解析。

因此,现在可以编写如下代码:

@BoundNumber(byteOrder=Native) int value;

...转换为带符号的32位整数,基于架构的字节顺序。