私は 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()
。ただし、Java 側では負の値が返されるため、直接返すstatic_cast<jlong>(value)
のも良い方法ではないように思えます。
すべてのケースをスムーズかつ正しく処理できるより良いアプローチがあるかどうかを知ることはできますか?