2011-11-04 23 views
15

符号なし整数をjintに変換するにはどうすればよいですか?私はそれをまったく変換する必要がありますか、特別な処置をせずに返品することはできますか?これは基本的に私のコードですが、JNIをローカルにセットアップしていないので、テストできません。JNI:符号なし整数をjintに変換する

JNIEXPORT jint JNICALL 
Java_test_test(JNIEnv* env, jobject obj, jlong ptr) 
{ 
    MyObject* m = (MyObject*) ptr; 
    unsigned int i = m->get(); 
    return i; 
} 

答えて

16

一般的には、jintintと等価であり、したがって、unsigned intの約半分の値を保持することができます。変換は黙って動作しますが、jintの値が負の場合、またはunsigned intの値がjintが保持できる最大値より大きい場合、結果は期待どおりになりません。

+0

私は小さな数字だけを保存しています。これは決してjintの限界を超えないので、うまくいくはずです。 – Pedro

+0

彼らはこれまで否定的なことができますか? –

+0

@Jonathan値が符号なし整数の半分に達すると、型の実装方法によって負のintが返されます。小さな値は大丈夫です – Will03uk

6

jintすべての通常の鋳造ルールが適用されますので、int32_tのtypedefです。

7

コンパイラの設定によっては、符号付き/符号なし整数の混在に関する警告が表示される場合もあります。エラーはありません。上の答えからのすべての警告が適用されます - unsigned int 0x80000000(2,147,483,648)以上の値は、Java側で負の整数として終了します。

それは、それらの多くはJavaで保存されていることが不可欠だ場合は、代わりに、戻りデータ型としてjlongを使用して、次のように変換します。

return (jlong)(unsigned long long)i; 

ポイントが最初にキャストし、その後、64ビットに拡張することです離れた符号なしの状態。それを逆にすると、64ビットの負の数が生成されます。

関連する問題