2012-07-18 39 views
9

我盡我最大的努力去Google,但無法找到乾淨的答案,以類似於表格的形式顯示類型轉換。從C到Java的類型轉換

我想轉換這些類型的原因是因爲我使用Android NDK從本機代碼調用函數。問題是本地代碼調用了Java中不存在的不同類型。

我其實沒有C語言的經驗,並且很快從代碼中發現了這幾種類型。請隨時編輯這篇文章,添加不同的類型進行轉換。

From C to Java 

long -> 

short -> 

char -> 

unsigned long -> 

unsigned short -> 

unsigned char -> 

byte -> 

Int8 -> 

Int16 -> 

Int32 -> 

UInt8 -> 

UInt16 -> 

UInt32 -> 

此外,如果其中任何一個不能轉換爲Java類型,請解釋原因。

+0

Android的Dalvik虛擬機是一個32位的唯一的VM,所以轉換應該是微不足道的。請參閱http://stackoverflow.com/a/11527544/841108 – 2012-07-18 14:01:01

+0

具有指定寬度的帶符號類型應按照[此Java教程頁面](http:// http:// http:// docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)。至於其他方面,找出的方法是打印出'sizeof(long)'等字樣。告訴你何時在目標設備上運行。 (C數據類型的寬度在某種程度上是針對編譯器和體系結構的。) – millimoose 2012-07-18 14:01:50

+0

但''給出C99的已知寬度的整數類型。 – 2012-07-18 14:05:46

回答

7

這些是等價的,要記住Java中的原始數據類型的大小始終是相同的,而C中的數據類型的大小在某種程度上是編譯器和體系結構特定的@millimoose在評論中。

此外,要知道的是,char數據類型是defined爲「是可包含基本字符集的機器的最小可尋址單元,它是一個整數類型。實際類型可以取決於實現被任一符號或無符號」,而在Java中是一個單一的16位Unicode字符。

long -> long 
short -> short 
char -> char 
unsigned long -> N/A 
unsigned short -> N/A 
unsigned char -> N/A 
byte -> byte 
Int8 -> byte 
Int16 -> short 
Int32 -> int 
UInt8 -> N/A 
UInt16 -> N/A 
UInt32 -> N/A 

在Java中沒有無符號的原始數據類型。 byte類型使用8位,int 32位,short 16位和long 64位。

這裏是link到Java教程中的相關部分,以及section §4.2中的Java Language Specification的更詳細的解釋。

+0

爲什麼這些是N/A? – JuiCe 2012-07-18 14:01:47

+0

@JuiCe Java不支持無符號類型。取決於你需要做什麼,你需要轉換爲更大的簽名類型(用於計算)或簽名類型(當保持相同的位模式很重要時)。 – millimoose 2012-07-18 14:03:15

+0

@JuiCe這意味着Java沒有一個等效的類型。 – 2012-07-18 14:03:31

-1

需要導入類

類UInt32的

java.lang.Object繼承

然後你就可以簡單的使用UINT32和標記Uint16