欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

JNI由淺入深_5_基本類型應(yīng)用 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

JNI由淺入深_5_基本類型應(yīng)用

發(fā)表時間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數(shù):53

1、根本類型應(yīng)用



對于JNI處理根本類型照樣比較簡單的,下面是Java代碼:
<span style="font-size:14px;"> public native int intMethod(int n);

 public native boolean booleanMethod(boolean bool);</span>
膳綾擎的辦法是在Java中寫的,留意要加native關(guān)鍵字,這兩個辦法都比較簡單,分別傳入int ,boolean類型到j(luò)ni中,經(jīng)由處理返回。下面是jni的代碼:
<span style="font-size:14px;">JNIEXPORT jint JNICALL Java_com_example_jniandroid_service_SimpleObject_intMethod(
		JNIEnv * env, jobject obj, jint val) {
	return val * val;
}

JNIEXPORT jboolean JNICALL Java_com_example_jniandroid_service_SimpleObject_booleanMethod(
		JNIEnv * env, jobject obj, jboolean val) {
	return !val;
}</span>

2、根本數(shù)據(jù)類型的數(shù)組應(yīng)用


      2.1 c處理Java的int[],并返回該數(shù)組元素的總和。
public native int intArrayMethod(int[] intArray);
/**
 * 求數(shù)組的和,返回一個int類型
 */
JNIEXPORT jint JNICALL Java_com_example_jniandroid_service_SimpleObject_intArrayMethod(
		JNIEnv * env, jobject obj, jintArray array) {
	int i, sum = 0;
	//獲取數(shù)組的長度
	jsize len = (*env)->GetArrayLength(env, array);
	//取得數(shù)組首地址的指針
	jint *body = (*env)->GetIntArrayElements(env, array, 0);
	for (i = 0; i < len; i++) {
		//獲取數(shù)組中的元素
		sum += body[i];
	}
	//釋放資本
	(*env)->ReleaseIntArrayElements(env, array, body, 0);
	LOGD("數(shù)組總和 =%d", sum);
	return sum;
}
2.2 native辦法返回一個int[].
public native int[] receiverIntArray();
對應(yīng)的c簽名
/**
 * 返回Java的int[]類型
 */
JNIEXPORT jintArray JNICALL Java_com_example_jniandroid_service_SimpleObject_receiverIntArray(
		JNIEnv * env, jobject obj) {
	int i = 1;
	jintArray array; //定義數(shù)組對象
	array = (*env)->NewIntArray(env, 10);
	for (; i <= 10; i++) {
		//void SetIntArrayRegion(jintArray array, jsize start, jsize len,const jint *buf)//  len:為1
		(*env)->SetIntArrayRegion(env, array, i - 1, 1, &i);
	}
	/* 獲取數(shù)組對象的元素個數(shù) */
	int len = (*env)->GetArrayLength(env, array);
	/* 獲取數(shù)組中的所有元素 */
	jint* elems = (*env)->GetIntArrayElements(env, array, 0);

	for (i = 0; i < len; i++) {
		LOGD("ELEMENT %d IS %d\n", i, elems[i]);
	}

	return array;

}

3、JNI處理string類型和String數(shù)組


	public native String stringMethod(String text);

	public native String[] receiverStringArray(String val);
下面是jni的實現(xiàn),在c文件的前面聲明數(shù)組長度 #define ARRAY_LENGTH 5 。第一個辦法是將一個字符串中的每個字符轉(zhuǎn)換成大年夜寫,第二辦法返回一個String類型的數(shù)組。這里用到了FindClass辦法,它重要根據(jù)類的包名找到該類的class,在經(jīng)由過程new辦法創(chuàng)建對象。
JNIEXPORT jstring JNICALL Java_com_example_jniandroid_service_SimpleObject_stringMethod(
		JNIEnv * env, jobject obj, jstring string) {
	const char *str = (*env)->GetStringUTFChars(env, string, 0);
	char cap[128];
	//copy字符串
	strcpy(cap, str);
	(*env)->ReleaseStringUTFChars(env, string, str);
	int i = 0;
	for (i = 0; i < strlen(cap); i++) {
		//轉(zhuǎn)換成大年夜寫
		*(cap + i) = (char) toupper(*(cap + i));
	}
	return (*env)->NewStringUTF(env, cap);

}

/**
 * 返回Java字符串?dāng)?shù)組
 */
JNIEXPORT jobjectArray JNICALL Java_com_example_jniandroid_service_SimpleObject_receiverStringArray(
		JNIEnv * env, jobject obj, jstring val) {
	//FindClass找到Java中String這個類,返回jni的jclass對象
	jclass objClass = (*env)->FindClass(env, "java/lang/String");
	//NewObjectArray創(chuàng)建對象數(shù)組,第二個參數(shù)長度,第三個類型
	jobjectArray texts = (*env)->NewObjectArray(env, (jsize) ARRAY_LENGTH,objClass, 0);
	jstring jstr;
	char* sa[] = { "Hello,", "world", "jni", "iii", "愛逝世你了" };
	int i = 0;
	for (; i < ARRAY_LENGTH; i++) {
		//創(chuàng)建jstring并賦值,NewStringUTF()函數(shù)將C說話的字符串轉(zhuǎn)換為jstring類型
		jstr = (*env)->NewStringUTF(env, sa[i]);
		//賦值
		(*env)->SetObjectArrayElement(env, texts, i, jstr); //必須放入jstring
	}
	return texts;

}

相關(guān)案例查看更多