`
高级java工程师
  • 浏览: 410828 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JNI大小写转换-字符串传递

阅读更多
JNI (JAVA Native Interface) 是 Java 与 C 的桥梁,有些时候要用到 JNI :

•访问底层硬件
•提高代码运行效率
简单的整型数据传递

•首先添加环境变量:
◦jni.h  include=C:\Program Files\Java\jdk1.6.0_13\include
◦jni_md.h  include=C:\Program Files\Java\jdk1.6.0_13\include\win32
•用 eclipse 编写 Java 代码:D_int.java
Java代码
1.package com.ldq.d_int;  
2. 
3.public class D_int {  
4.    static {  
5.        System.loadLibrary("Factorial");  
6.    }  
7. 
8.    public native long getFactorial(int num);  
9. 
10.    public static void main(String[] args) {  
11.        D_int d = new D_int();  
12.        int num = 10;  
13.        System.out.println(num + "!=" + d.getFactorial(num));  
14.    }  
15. 
16.} 
package com.ldq.d_int;

public class D_int {
static {
System.loadLibrary("Factorial");
}

public native long getFactorial(int num);

public static void main(String[] args) {
D_int d = new D_int();
int num = 10;
System.out.println(num + "!=" + d.getFactorial(num));
}

}


•在 bin 目录下,生成头文件 com_ldq_d_int_D_int.h:javah -jni com.ldq.d_int.D_int
C代码
1./* DO NOT EDIT THIS FILE - it is machine generated */ 
2.#include <jni.h>  
3./* Header for class com_ldq_d_int_D_int */ 
4. 
5.#ifndef _Included_com_ldq_d_int_D_int  
6.#define _Included_com_ldq_d_int_D_int  
7.#ifdef __cplusplus  
8.extern "C" {  
9.#endif  
10./* 
11. * Class:     com_ldq_d_int_D_int 
12. * Method:    getFactorial 
13. * Signature: (I)J 
14. */ 
15.JNIEXPORT jlong JNICALL Java_com_ldq_d_1int_D_1int_getFactorial  
16.  (JNIEnv *, jobject, jint);  
17. 
18.#ifdef __cplusplus  
19.}  
20.#endif  
21.#endif 
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ldq_d_int_D_int */

#ifndef _Included_com_ldq_d_int_D_int
#define _Included_com_ldq_d_int_D_int
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     com_ldq_d_int_D_int
* Method:    getFactorial
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_com_ldq_d_1int_D_1int_getFactorial
  (JNIEnv *, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif

•在 bin 目录下新建 Factorial.cpp 文件,并根据上面函数定义,编写代码:
Cpp代码
1.#include "com_ldq_d_int_D_int.h"  
2. 
3.JNIEXPORT jlong JNICALL Java_com_ldq_d_1int_D_1int_getFactorial (JNIEnv *env, jobject obj, jint num)  
4.{  
5.    int f=1;  
6.    for(int i=1;i<num+1;i++)  
7.    {  
8.        f*=i;  
9.    }  
10.    return f;  
11.} 
分享到:
评论

相关推荐

    java的JNI小联系

    - 字符串处理:Java字符串在本地代码中通常表示为jstring,需要使用GetStringUTFChars()和ReleaseStringUTFChars()进行转换。 5. 数据类型转换: JNI提供了多种数据类型,用于在Java和本地代码之间转换数据,例如...

    JNI官方规范中文

    5. **字符串和数组处理**:JNI提供接口来操作Java的字符串和数组,如`NewStringUTF`用于创建UTF-8编码的Java字符串,以及`GetArrayLength`和`GetPrimitiveArrayCritical`来获取数组长度和直接访问数组元素。...

    新版Android开发教程.rar

    � Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己...

    java实习日记范文3篇.docx

    9. **类型转换**:Java支持基本类型的自动类型转换(小类型到大类型)和强制类型转换(大类型到小类型,需要显式操作)。例如,将`String`转换为`int`可以使用`Integer.parseInt()`。 10. **命令行参数**:Java程序...

    安卓NDK RSA 加解密实现

    而BASE64编码是一种字符编码方式,用于将二进制数据转换成ASCII字符串,便于在网络传输或存储时使用。 以下是使用NDK实现RSA加解密的基本步骤: 1. 在C/C++层编写RSA加密和解密的函数,调用OpenSSL库提供的API,如`...

    Java面经.适用于校招

    - 如果字符串不是有效的整数格式,将会抛出NumberFormatException异常。 1.1.4 Shorts1=1; s1=s1+1;有什么错? Shorts1=1; s1+=1;有什么错? - Shorts1=1; s1=s1+1;在shorts1=1时会自动提升为int类型,然后执行加1...

    ffmpeg压缩视频功能

    首先,编写一个C/C++接口,如`executeFFmpegCmd`,接收命令字符串作为参数,并调用系统调用来执行FFmpeg命令。 2. 构造压缩命令:视频压缩的命令通常包括选择合适的编码器、设置比特率、分辨率等参数。例如: ``` ...

    Java原生接口.pdf

    在处理数据类型时,如字符串(String),Java使用UTF-16编码,而C/C++通常使用UTF-8,因此在跨语言调用时需要进行编码转换,这增加了额外的开销。 此外,JNI调用还涉及到内存管理问题。由于Java有自动的垃圾收集...

    Java小例子(5).rar

    例如,`jclass`用于表示Java类,`jobject`可以代表任何对象,`jstring`则代表字符串。 6. **数据类型转换**:JNI提供了函数来在Java数据类型和C/C++数据类型之间进行转换,如`jbooleanToBoolean()`, `GetIntField()...

    Android设计思想解读开源框架.pdf

    Android应用中的资源文件包括图像、布局文件、字符串资源等。这些资源通常存储在应用的`res/`目录下。资源加载机制涉及以下几个关键方面: - **资源索引**:在Android应用打包过程中,所有资源都会被赋予一个唯一的...

Global site tag (gtag.js) - Google Analytics