1

我想将Preon用于与用 C 编写的服务器进行通信的项目。协议取决于机器的本机字节序(您可以java.nio.ByteOrder.getNative()在假设 JVM 与服务器具有相同字节序的情况下解决这个问题)并uint64_t用于数据长度和int32_t状态码(负值表示错误)。

我在 Preon 文档中找不到有关签名的信息。我快速查看了源代码,发现nl.flotsam.preon.buffer.DefaultBitBuffer使用了带符号的移位(<<>>),并且几个方法的 javadoc 注释nl.flotsam.preon.buffer.BitBuffer也表明它使用有符号整数,但 javadoc 注释nl.flotsam.preon.buffer.BitBufferBitBuffer使用无符号整数。这让我很困惑。

Preon 的默认整数格式是什么?我如何表示uint64_tint32_t

4

1 回答 1

0

对于标有@BoundNumber 的数据,默认为 LittleEndian。您可以像这样覆盖它:

@BoundNumber(byteOrder=BigEndian)

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

我可以看到它的工作方式是只使用另一个枚举常量,称为 Platform。

更新:

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

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

@BoundNumber(byteOrder=Native) int value;

…它转换为一个有符号的 32 位整数,字节顺序基于架构。

于 2010-08-23T16:07:16.303 回答