回答
通常,使用像'uint64_t'這樣的精確寬度的整數是有原因的。 如果您將其轉換爲int,這可能不是64位長,你可能有嚴重的問題......
whatever_your_int_var_name_is = (int)whatever_your_uint64_t_var_name_is;
注意,Java不支持無符號類型。 java中最接近的類型將會很長,因爲它也有64位。 長uint64不會丟失數據,因爲位數相同,但是較大的值將顯示爲負數。
簡短的回答:
uint64_t foo;
int bar;
bar = foo;
從技術上講這不確定的行爲如果foo
值不以int
適合。在實踐中,它總是會簡單地截斷高位。如果你想更正確的話,那麼:
if (foo-INT_MIN <= (uint64_t)INT_MAX-INT_MIN)
bar = foo;
else
/* error case here */
如果你正在編寫JNI包裝,uint64_t的最佳匹配是long,而不是int。即使那樣你也會失去準確性,因爲Java沒有無符號類型(因此你沒有),你需要準備檢查值的符號。
有沒有辦法在Java中存儲C的uint64_t? 在我的情況下,uint64_t始終是一個正數 – mkn 2010-07-21 11:26:35
如果您希望uint64_t *只是*將它作爲標識符傳遞給java(並返回C),請使用long - 不會降級,但值大於2^63會變成負值 - 長達64位的定義,但使用一點點作爲標誌。 – 2010-07-21 11:53:03
hm ... 我有C方法,它返回一個page_ID,它是一個uint64_t數字。現在我需要將該數字存儲在Java HashMap中。那麼在Java HashMap中存儲uint64_t的最佳方式是什麼?問題是,當我執行查找操作時,我需要在HashMap中獲取該特定值並將其轉換回uint64_t,以便我可以在C代碼中調用一個函數,該函數需要uint64_t作爲參數。
P.S.我用jlong pid =(jlong)pid_in_uint64_t完成了它; 迄今爲止這麼好...
'jlong'似乎很適合你的目的。 – 2010-07-21 11:35:00
- 1. 將uint64_t轉換爲std :: string
- 2. Arduino中的Serial.print uint64_t
- 3. 轉換uint64_t中爲void *和背部
- 4. uint64_t的容量?
- 5. C++將字符串轉換爲uint64_t
- 6. uint64_t中在32位機寫入
- 7. 按位變速操作uint64_t中可變
- 8. 如何在cuda c中爲「const uint64_t *」分配「const void *」?
- 9. 濃縮3漂浮到uint64_t
- 10. 存儲int16_t在uint64_t的
- 11. 勘定INT ***爲int [] [] []
- 12. 在Haskell中將Maybe Int轉換爲Int
- 13. 在'C'中將int轉換爲int []
- 14. 轉換類型爲int(C :: *)(INT,CHAR)爲int類型(INT,CHAR)
- 15. C++將SATOSHI(uint64_t)轉換爲BTC(字符串)無浮點/雙
- 16. 將uint32_t轉換爲uint64_t會產生不同的值?
- 17. 從int []轉換爲int *
- 18. 將[Int?]轉換爲[Int]
- 19. 將int轉換爲int []
- 20. 將IO Int轉換爲Int
- 21. 類型爲int *(*)(INT *,詮釋*(*)())
- 22. 從int *轉換爲int&
- 23. 將「int triplets」映射爲int?
- 24. 與uint64_t移動不按預期工作
- 25. 如何在同步Dart原生擴展中爲uint64_t處理太大的整數?
- 26. 如何字節數組轉換爲uint64_t中的Arduino的LED矩陣
- 27. JSON爲INT
- 28. 檢測uint64_t中的整數溢出的乘法以C
- 29. 複製字節反轉uint64_t中以uint8_t數組
- 30. 轉換小串的有效實施,uint64_t中
那麼,有什麼辦法可以避免這些問題?或者'uint64_t'等價於一個'int',無論它在哪裏都可以使用? – JohnK 2013-04-24 21:55:59
int的大小取決於實現。在今天的計算機上,它通常是32位,但它可能只是任何東西......所以很顯然,將uint64_t轉換爲int可能會導致截斷的整數... – Macmade 2013-04-24 22:02:07
所以它會工作到一個長長'而不是? – JohnK 2013-04-24 22:59:46