2011-11-04 283 views
15

如何將unsigned int轉換爲jint?我是否必須完全轉換它,或者我可以在沒有任何特殊處理的情況下返回它嗎?這基本上是我的代碼,但我無法測試它,因爲我沒有在本地設置JNI。JNI:將unsigned int轉換爲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

在一般情況下,jint相當於int,因此可以保留大約一半的值unsigned int。轉換將無聲無息地進行,但如果jint值爲負值或unsigned int值大於a jint可容納的最大值,則結果將不會符合您的預期。

+0

我只存儲少量數字,永遠不會超過jint的限制,所以它應該沒問題。 – Pedro

+0

他們可以負面嗎? –

+0

@Jonathan一旦該值達到unsigned int容量的一半,由於類型的實現方式,它將給出一個負值int;小數值很好 – Will03uk

6

jintint32_t一個typedef使所有常見的鑄造規則。

7

根據您的編譯器設置,可能會也可能不會有混合帶符號/無符號整數的警告。不會有錯誤。上述答案中的所有注意事項適用於-0.值0x80000000(2,147,483,648)及以上將最終成爲Java端的負整數。

如果它的當務之急是那些大量在Java中保存,使用jlong爲返回的數據類型,而是和轉換這樣的:

return (jlong)(unsigned long long)i; 

的一點是首先擴大到64位,然後投離開無符號性。反過來做會產生一個64位的負數。

相關問題