2012-07-18 21 views
9

Hice todo lo posible para Google esto, pero no pude encontrar una respuesta limpia en forma de tabla que muestra las conversiones de tipo.Conversión de tipo de C a Java

La razón por la que me gustaría convertir estos tipos, es porque estoy usando el NDK de Android para llamar funciones desde código nativo. El problema es que el código nativo llama a diferentes tipos que no existen en Java.

En realidad no tengo experiencia en C, y he descubierto que estos pocos tipos miran el código rápidamente. No dude en editar esta publicación para agregar diferentes tipos a convertir.

From C to Java 

long -> 

short -> 

char -> 

unsigned long -> 

unsigned short -> 

unsigned char -> 

byte -> 

Int8 -> 

Int16 -> 

Int32 -> 

UInt8 -> 

UInt16 -> 

UInt32 -> 

Además, si alguno de estos no se puede convertir en un tipo de Java, explique por qué.

+0

Android Dalvik VM es una única máquina virtual de 32 bits, entonces la conversión debería ser trivial. Consulte también http://stackoverflow.com/a/11527544/841108 –

+0

Los tipos firmados con anchuras especificadas deben asignarse a 'byte',' short' y 'int' según [esta página de Tutorial de Java] (http: // docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html). En cuanto a los demás, una forma de averiguarlo sería imprimir qué 'sizeof (long)' et al. decirle cuando se ejecutó en su dispositivo de destino. (El ancho de los tipos de datos C es en cierta medida específico del compilador y de la arquitectura). – millimoose

+0

Pero '' proporciona tipos integrales de ancho conocido para C99. –

Respuesta

7

Estas son las equivalencias, teniendo en cuenta que el tamaño de un tipo de datos primitivos en Java es siempre el mismo, mientras que el tamaño de un tipo de datos en C es en cierta medida específico del compilador y de la arquitectura, como lo indica @millimoose en los comentarios.

Además, tenga en cuenta que el tipo de datos char es defined como "unidad direccionable más pequeño de la máquina que puede contener el conjunto de caracteres básico. Es un tipo entero. Tipo real puede ser ya sea con o sin signo dependiendo de la aplicación", mientras en Java es un único carácter Unicode de 16 bits.

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 

En Java no hay tipos de datos primitivos sin signo. El tipo byte utiliza 8 bits, int 32 bits, short 16 bits y long 64 bits.

Aquí hay un link a la sección correspondiente en el tutorial de Java, y una explicación más detallada en section §4.2 del Java Language Specification.

+0

¿Por qué varios de estos son N/A? – JuiCe

+0

@JuiCe Java no admite tipos sin firmar. Dependiendo de lo que necesite hacer, necesita convertir a un tipo con signo más grande (para computación), o al tipo con signo (cuando es importante mantener el mismo patrón de bits). – millimoose

+0

@JuiCe Eso significaría que Java no tiene un tipo equivalente –

-1

es necesario importar la clase

Clase UInt32

java.lang.Object

Y entonces usted puede utilizar sencilla Uint32 y Uint16

Cuestiones relacionadas