首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JNI程序中的jstring返回

JNI程序中的jstring返回
EN

Stack Overflow用户
提问于 2012-12-10 15:38:50
回答 2查看 44K关注 0票数 26

这是JNI代码。

Java代码:

代码语言:javascript
复制
public class Sample1 {
 
    public native String stringMethod(String text);
    
    public static void main(String[] args)
    {
       System.loadLibrary("Sample1");
       Sample1 sample = new Sample1();
    
       String  text   = sample.stringMethod("world");
    
       System.out.println("stringMethod: " + text);    
   }
}

stringMethod函数的Cpp方法:

代码语言:javascript
复制
JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
   (JNIEnv *env, jobject obj, jstring string) {
   
 const char *name = env->GetStringUTFChars(string, NULL);//Java String to C Style string
 char msg[60] = "Hello ";
 jstring result;

 strcat(msg, name);
 env->ReleaseStringUTFChars(string, name);
 puts(msg);
 result = env->NewStringUTF(msg); // C style string to Java String
 return result;    
 }

当运行我的java代码时。我得到了下面的结果。

代码语言:javascript
复制
stringMethod: world

但是我在字符串"world“后面加上了"Hello”。我也会在这里返回附加的字符串。但是为什么我只能得到"world“而不是"Hello World”。我真的把这段代码搞糊涂了。我应该怎么做才能得到带有附加字符串的结果?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-28 10:44:55

代码语言:javascript
复制
JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
    (JNIEnv *env, jobject obj, jstring string) 
{    
    const char *name = (*env)->GetStringUTFChars(env,string, NULL);
    char msg[60] = "Hello ";
    jstring result;
    
    strcat(msg, name);  
    (*env)->ReleaseStringUTFChars(env,string, name);   
    puts(msg);            
    result = (*env)->NewStringUTF(env,msg); 
    return result;        
}
票数 21
EN

Stack Overflow用户

发布于 2019-12-16 14:06:58

有几种方法,但我得到的最好的方法是先将const char *转换为c++字符串,然后再转换为jbyteArray,而且在Java端将byteArray转换为UTF-8很容易。

C++端:

代码语言:javascript
复制
const char* string = propertyValue;
std::string str = string;

jbyteArray array = env->NewByteArray(str.length());
env->SetByteArrayRegion(array,0,str.length(),(jbyte*)str.c_str());


return array;

Java/kotlin端:

代码语言:javascript
复制
String((array), Charset.defaultCharset()))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13796786

复制
相关文章

相似问题

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