我写了一些代码,使用 jni 在 java 和 c 之间传递值。
目前所有数字都定义为 int (java) -> jnit (jni/c) -> unsigned int (c)
代码可以运行,但效率真的很低,因为并非所有传递的数字都需要整数可用的内存。
我的代码中有 3 种类型的值,它们需要保存数字范围 0 到 4294967295、0 到 255 和 0 到 1。
我无法在所有 3 种“语言”中计算出兼容的数据类型。
Range Java C/JNI C
4294967296 int jint unsigned int
256 ??? ??? unsigned char
2 boolean jboolean ???
能否请您告知我需要为上述 ??? 使用哪些数据类型?
谢谢 G
最佳答案
请记住,Java 中没有无符号类型。所以 Java int
实际上无法存储 C unsigned int
的所有值。您还假设 C unsigned int
始终为 32 位宽。它可以是不同的尺寸,尽管行业已经对其进行了一定程度的标准化。
除此之外,按照这里的逻辑,int
是 jint
是 unsigned int
as byte
是jbyte
是unsigned char
,boolean
是jboolean
是_Bool
(未充分使用的 C99 类型,只能将 1
或 0
作为值。)
请注意,C 中的 char
与 Java 中的 char
不同;前者代表一个字节,不管它有多少位宽,而后者代表一个 UTF-16 字符。另请注意,根据编译器和平台的不同,char
在 C 中可能是有符号或无符号的,因此为了安全起见,如果符号可能很重要,您应该明确使用 signed char
。
关于android - 哪种 JNI 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940045/