首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将char *tab[10]转换为java对象(JNI)

将char *tab[10]转换为java对象(JNI)
EN

Stack Overflow用户
提问于 2010-12-17 17:09:43
回答 2查看 1.4K关注 0票数 0

我正在尝试通过JNI在java中使用C。我不是一个C程序员。

下面是我必须转换的C "object“:char *tab10

首先,我不确定它是什么意思:它是指向char的选项卡的指针,还是指向char的指针的选项卡?(有什么不同吗?)

那么,等价的java对象会是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的字符中:

代码语言:javascript
复制
jEnv->ReleaseCharArrayElements(javaCharArray, C_CharArray, JNI_COMMIT);

其中jEnv -是java环境,通过JNI调用传递。如果你有一个指针,你可能需要像*C_CharArray一样去引用它。我想这可能行得通。

票数 0
EN

Stack Overflow用户

发布于 2010-12-17 17:18:59

它(很可能)是一个由10个字符串数组组成的数组,因此可以直接建模为:

代码语言:javascript
复制
String[] tab = new String[10];

它也可能是一个字符缓冲区数组,因此您可以使用StringBuilder而不是String。请记住,Java数组本身就是对象,并且知道它们的大小,因此信息不会附加到类型上(与C不同,在C中,数组大小是类型特征)。

我不希望通过JNI直接传输类型/值;您需要一些转换胶水代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4469018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档