将uint64_t转换为 jlong 的最佳方法
Best way to convert uint64_t to jlong
我正在编写一个 JNI 代码,遇到需要将uint64_t转换为 jlong 的情况,这是我目前将uint64_t转换为 jlong 的方法:
jlong uint64_t_to_jlong (uint64_t value) {
if (value > std::numeric_limits<jlong>::max()) {
return std::numeric_limits<jlong>::max();
}
return static_cast<jlong>(value);
}
这显然不是一个完美的方法,因为它在value > std::numeric_limits<jlong>::max()
时无法真正正确转换值。 但是,直接返回static_cast<jlong>(value)
对我来说也不是一个好方法,因为在 Java 端,我们将收到负值。
我能知道是否有更好的方法可以顺利正确地处理所有案件吗?
正如 Louis 在评论中所建议的,在 Java 8 中处理它的一种方法是简单地将uint64_t
转换为C++端的jlong
,然后使用 Java 8 提供的一组无符号操作(如 Long.compareUnsigned() )来执行必要的操作:
public static int compareUnsigned(long x, long y)
Compares two long values numerically treating the values as unsigned.
Google Guava的未签名库也可以在不使用Java 8的情况下实现这一点。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 检测win32服务创建和删除的最佳方法
- 在reactor中存储eventHandlers的最佳方式是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在AVX通道中混洗的最佳方式
- 程序顶部的声明与定义(最佳实践)
- 将uint64_t转换为 jlong 的最佳方法