tipos programacion primitivos ejemplos ejemplo datos java c++ java-native-interface unsigned-integer

java - ejemplos - tipos de datos primitivos en programacion



JNI: convertir int sin signo a jint (3)

¿Cómo convierto un int sin firmar a jint? ¿Tengo que convertirlo o puedo devolverlo sin ningún tratamiento especial? Este es básicamente mi código en este momento, pero no puedo probarlo, ya que no he configurado JNI localmente.

JNIEXPORT jint JNICALL Java_test_test(JNIEnv* env, jobject obj, jlong ptr) { MyObject* m = (MyObject*) ptr; unsigned int i = m->get(); return i; }


Dependiendo de la configuración de su compilador, puede o no haber una advertencia sobre la mezcla de enteros con signo / sin signo. No habrá error. Se aplican todas las advertencias de las respuestas anteriores: los valores unsigned int de 0x80000000 (2,147,483,648) y superiores terminarán como enteros negativos en el lado de Java.

Si es imperativo que esos números grandes se conserven en Java, use un jlong como un tipo de datos de retorno en su lugar, y jlong esta manera:

return (jlong)(unsigned long long)i;

El punto es expandir primero a 64 bits, luego desechar sin firmar. Hacerlo al revés produciría un número negativo de 64 bits.


En el caso general, jint es equivalente a int , por lo que puede contener aproximadamente la mitad de los valores de unsigned int . La conversión funcionará de forma silenciosa, pero si un valor jint es negativo o si un valor unsigned int es mayor que el valor máximo que puede contener un jint , el resultado no será el que esperaba.


jint es un typedef para int32_t por lo que se int32_t todas las reglas de conversión habituales.