我正在尝试通过JNI在java中使用C。我不是一个C程序员。
下面是我必须转换的C "object“:char *tab10
首先,我不确定它是什么意思:它是指向char的选项卡的指针,还是指向char的指针的选项卡?(有什么不同吗?)
那么,等价的java对象会是什么呢?
发布于 2010-12-17 17:41:58
char * tab10是指向字符数组的指针(指向第一个元素)。
以下是JNI API:http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html
在JNI中"C char“的等效类型是jchar -在java中它是" char ”原语类型;你可以做的事情是:将它复制到java中的existand String对象中,或者复制到java原语字符数组中。使用全文链接:http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#array_operations
第二种方式是may看起来像这样:
您可以将java字符数组传递到JNI调用中,或者使用New<PrimitiveType>Array函数从C代码创建新的java数组。但是,在java中,您将以指向数组的指针结束。他们将你的C字符复制到java的字符中:
jEnv->ReleaseCharArrayElements(javaCharArray, C_CharArray, JNI_COMMIT);其中jEnv -是java环境,通过JNI调用传递。如果你有一个指针,你可能需要像*C_CharArray一样去引用它。我想这可能行得通。
发布于 2010-12-17 17:18:59
它(很可能)是一个由10个字符串数组组成的数组,因此可以直接建模为:
String[] tab = new String[10];它也可能是一个字符缓冲区数组,因此您可以使用StringBuilder而不是String。请记住,Java数组本身就是对象,并且知道它们的大小,因此信息不会附加到类型上(与C不同,在C中,数组大小是类型特征)。
我不希望通过JNI直接传输类型/值;您需要一些转换胶水代码。
https://stackoverflow.com/questions/4469018
复制相似问题