gpt4 book ai didi

java - Preon 中的有符号和无符号整数

转载 作者:行者123 更新时间:2023-12-01 05:54:28 24 4
gpt4 key购买 nike

我想使用Preon用于与用 C 编写的服务器进行通信的项目。该协议(protocol)取决于机器的 native 字节序(假设 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.BitBufferBitBuffer使用无符号整数。这让我很困惑。

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

最佳答案

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

@BoundNumber(byteOrder=BigEndian)

...但目前无法选择特定于平台的选项。这是一个限制。您可能需要考虑为此提出问题。 (否则,我会在将来的某个地方。)

我看到它工作的方式是有另一个枚举常量,称为 Platform。

更新:

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

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

@BoundNumber(byteOrder=Native) int value;

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

关于java - Preon 中的有符号和无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com