首页 > 解决方案 > 将 Java int 转换为 C 无符号 int

问题描述

我想知道是否可以将 Java 转换int为 C,unsigned int尤其是如果 Javaint是负数?

根据评论进行编辑:转换不是通过 JNI,而是我有一组int由 Java 库写入存储。该库存在 C 版本,但它使用unsigned int. 我想使用 C 库来读取intJava 库持久化的内容。

标签: javac

解决方案


如果 Cunsigned int是 32 位,那么 Javaint包含完全相同的二进制值,即使它是负数。假设您要将其转换为等效的正值,您正在寻找Integer::toUnsignedStringInteger::toUnsignedLong。如果您想使用 JNI 将值传递给 C 库,那么它已经具有所需的二进制值。

再次响应您的编辑,如果 C 库使用 32 位整数(可能不是),那么它将简单地获得无符号值。因此,如果 Java 代码写入了值-2( 0xfffffffe),那么 C 库将读入4294967294,始终假设它们对数字使用相同的字节序。

(Java ObjectOutputStream 或 DataOutputStream 将以 big-endian 顺序写入字节,并且在许多架构上 C 将使用 little-endian,但大概 Java 和 C 版本的库被设计为使用相同的 endianness。)


推荐阅读