1
根據SWIG Documentation(21.9.1默認原語類型映射),將C uint8_t映射到16位的Java short,並將C uint_15_t映射到32位的Java int。我相信C函數分別是8位和16位,爲什麼SWIG在使用Java進行封裝時將位數加倍?SWIT Wrapping for uint8_t和uint16_t
根據SWIG Documentation(21.9.1默認原語類型映射),將C uint8_t映射到16位的Java short,並將C uint_15_t映射到32位的Java int。我相信C函數分別是8位和16位,爲什麼SWIG在使用Java進行封裝時將位數加倍?SWIT Wrapping for uint8_t和uint16_t
問題是Java類型總是被簽名。
因此,如果您有一個從0到255的無符號C類型,那麼可以表示該範圍上半部分的最小Java類型是短的。
另一種方法是,可以改變或以某種方式改變你的uint8_t
使用Java的byte
的消極部分,但語義是非常常理。
這對於uint8_t是有意義的,但是你不能使用短的那麼對uint16_t呢?爲什麼使用32位int? – c12 2012-02-10 18:40:09
@ c12與'uint16_t'發生完全相同的問題。在Java中,'short'的範圍是-32,768到32,767,而'uint16_t'的範圍是0到65,536 - 如果你使用'short','uint16_t'的上半部應該在哪裏? – Flexo 2012-02-10 18:43:28
你如何得到一個字節而不是短的?我在java中使用一個庫,它使用字節並將它們從我的swig接口傳遞給它。由於簽名的原因,字節縮短成爲一種痛苦。 – Sam 2013-02-26 23:10:40