java - 将 Java int 转换为 C 无符号 int
问题描述
我想知道是否可以将 Java 转换int
为 C,unsigned int
尤其是如果 Javaint
是负数?
根据评论进行编辑:转换不是通过 JNI,而是我有一组int
由 Java 库写入存储。该库存在 C 版本,但它使用unsigned int
. 我想使用 C 库来读取int
Java 库持久化的内容。
解决方案
如果 Cunsigned int
是 32 位,那么 Javaint
包含完全相同的二进制值,即使它是负数。假设您要将其转换为等效的正值,您正在寻找Integer::toUnsignedString
或Integer::toUnsignedLong
。如果您想使用 JNI 将值传递给 C 库,那么它已经具有所需的二进制值。
再次响应您的编辑,如果 C 库使用 32 位整数(可能不是),那么它将简单地获得无符号值。因此,如果 Java 代码写入了值-2
( 0xfffffffe
),那么 C 库将读入4294967294
,始终假设它们对数字使用相同的字节序。
(Java ObjectOutputStream 或 DataOutputStream 将以 big-endian 顺序写入字节,并且在许多架构上 C 将使用 little-endian,但大概 Java 和 C 版本的库被设计为使用相同的 endianness。)
推荐阅读
- android - Wear OS - 模拟按下按钮使屏幕暂时变亮
- latex - 超过 99 篇在 Overleaf LaTeX 中使用 natbib 的参考文献
- jquery - 隐藏
- 带有特定标签
里面的标签 - 带有特定标签
- jpa - 如何使用 JPA 查询方法返回 NULL 的 OR 条件?
- apache - Htaccess 将特定 ip 地址重定向到文件
- compilation - 为什么没有广泛使用的工具来“预热”.NET 应用程序以防止“冷启动”?
- c# - 如何更改我的 LINQ 查询以显示正确的 XML?
- python - 如何将分割的图像与重叠结合起来
- sql - 如何按日期计算 hive SQL 表中 NEW id 的数量?
- javascript - 理解 RXJS 可观察输出的问题