2012-07-18 25 views
9

Ho fatto del mio meglio per Google ma non sono riuscito a trovare una risposta pulita in un modulo simile a una tabella che mostra le conversioni di tipo.Conversione di tipo da C a Java

Il motivo per cui vorrei convertire questi tipi, è perché sto usando l'NDK di Android per chiamare le funzioni dal codice nativo. Il problema è che il codice nativo chiama tipi diversi che non esistono in Java.

In realtà non ho esperienza in C, e ho trovato questi pochi tipi di guardare rapidamente il codice. Non esitate a modificare questo post per aggiungere diversi tipi da convertire.

From C to Java 

long -> 

short -> 

char -> 

unsigned long -> 

unsigned short -> 

unsigned char -> 

byte -> 

Int8 -> 

Int16 -> 

Int32 -> 

UInt8 -> 

UInt16 -> 

UInt32 -> 

Inoltre, se uno di questi non può essere convertito in un tipo Java, spiegare perché.

+0

Android Dalvik VM è un 32 bit solo VM, quindi la conversione dovrebbe essere banale. Vedi anche http://stackoverflow.com/a/11527544/841108 –

+0

I tipi firmati con larghezze specificate dovrebbero essere mappati a 'byte',' short' e 'int' come da [questa pagina di Java Tutorial] (http: // docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html). Per quanto riguarda gli altri, un modo per scoprirlo sarebbe di stampare quale 'sizeof (long)' et al. ti dico quando è stato eseguito sul tuo dispositivo di destinazione. (La larghezza dei tipi di dati C è in qualche misura specifica per compilatore e architettura.) – millimoose

+0

Ma '' fornisce tipi interi di larghezza nota per C99. –

risposta

7

Queste sono le equivalenze, tenendo presente che la dimensione di un tipo di dati primitivi in ​​Java è sempre la stessa, mentre la dimensione di un tipo di dati in C è in una certa misura compilatore e specifica dell'architettura, come indicato da @millimoose nei commenti.

Inoltre, essere consapevoli che il tipo di dati char è defined come "piccola unità indirizzabile della macchina che può contenere serie di caratteri di base. Si tratta di un tipo intero. Tipo effettivo può essere sia con o senza segno a seconda attuazione", mentre in Java è un singolo carattere Unicode a 16 bit.

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 

In Java non ci sono tipi di dati primitivi senza segno. Il tipo byte utilizza 8 bit, int 32 bit, short 16 bit e long 64 bit.

Ecco un link alla relativa sezione nel tutorial Java, e una spiegazione più dettagliata nel section §4.2 del Java Language Specification.

+0

Perché molti di questi sono N/D? – JuiCe

+0

@JuiCe Java non supporta i tipi non firmati. A seconda di cosa devi fare, devi convertire un tipo firmato più grande (per il calcolo) o il tipo firmato (quando è importante mantenere lo stesso schema di bit). – millimoose

+0

@JuiCe Ciò significherebbe che Java non ha un tipo equivalente. –

-1

è necessario importare classe

Classe UInt32

java.lang.Object

E quindi è possibile utilizzare semplici Uint32 e Uint16