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

标签 java 64-bit integer unsigned preon

我想使用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/

相关文章:

java - 使用多个相似的类高效地执行 CRUD 操作?

64-bit - 无法在Win 7 Prof上以64位模式运行CMD

c++ - modf 返回 1 作为小数 :

c++ - 表现得像 unsigned int 溢出。是什么原因造成的?

php - 在 PHP 中定义无符号 CHAR

java - 从控制台获取java输入

java - 如何从同一个表映射多个@OneToOne 关联

java - Spring的事件模型

c++ - x64 程序集双字上的符号扩展

linux - gcc:在 32 位平台上编译 64 位二进制文​​件