簡體   English   中英

如何從Android NDK中的C代碼獲取字符串?

[英]How to get a String from C code in Android NDK?

我正在開發Android ndk應用程序,在該應用程序中我想從C代碼中獲取String,例如在Java代碼中所做的操作:

Stringa fName = "ABCDE";
Stringa fMiddleName = "QWWER";
Stringa fLastName = "ZXCVV";

我想用C語言編寫此代碼,並希望將這些代碼中的值轉換為Java代碼。 現在,下面給出了獲取一些長值的代碼。

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <com_testing_ndk_FibLib.h>

static jlong fib(jlong n){
        return n<=0 ? 0 : n==1 ? 1: fib(n - 1) + fib(n - 2);
    }

JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNR
  (JNIEnv *env, jclass clazz, jlong n)
{
        return fib(n);
}
/*
 * Class:     com_testing_ndk_FibLib
 * Method:    fibNI
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNI
(JNIEnv *env, jclass clazz, jlong n)
{

    jlong previous = -1;
    jlong result = 1;
    jlong i;
    for (i=0;i<n;i++){
        jlong sum = result + previous;
        previous = result;
        result = sum;
    }
    return result;

}

我的Java代碼:

public class FibLib {

    static {
        System.loadLibrary("com_testing_ndk_FibLib");
    }

    public static long fibJR(long n){
        return n<=0 ? 0 : n==1 ? 1: fibJR(n - 1) + fibJR(n - 2);
    }
    public native static long fibNR(long n);


    public static long fibJI(long n){
        long previous = -1;
        long result = 1;
        for (long i=0;i<n;i++){
            long sum = result + previous;
            previous = result;
            result = sum;
        }
        return result;
    }
    public native static long fibNI(long n);
}

使用它在C ++中創建Java字符串

jstring str = env->NewStringUTF("Test");

爪哇

public native static String getTestString();

C ++

extern "C" {
  JNIEXPORT jstring JNICALL Java_com_testing_ndk_FibLib_fibNI_getTestString(JNIEnv* env, jclass jclazz) {
    jstring str = env->NewStringUTF("Test");
    return str;
  }
}

C

JNIEXPORT jstring JNICALL Java_com_testing_ndk_FibLib_fibNI_getTestString(JNIEnv* env, jclass jclazz) {
    jstring str = (*env)->NewStringUTF(env, "Hello from native code!");
    return str;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM