这是JNI代码。
Java代码:
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方法:
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代码时。我得到了下面的结果。
stringMethod: world
但是我在字符串"world“后面加上了"Hello”。我也会在这里返回附加的字符串。但是为什么我只能得到"world“而不是"Hello World”。我真的把这段代码搞糊涂了。我应该怎么做才能得到带有附加字符串的结果?
发布于 2014-11-28 10:44:55
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;
}
发布于 2019-12-16 14:06:58
有几种方法,但我得到的最好的方法是先将const char *
转换为c++字符串,然后再转换为jbyteArray
,而且在Java端将byteArray转换为UTF-8很容易。
C++端:
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端:
String((array), Charset.defaultCharset()))
https://stackoverflow.com/questions/13796786
复制相似问题