`
leidiqiu
  • 浏览: 135129 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JNI 大小写转换 — 字符串数据传递(二)

    博客分类:
  • JNI
阅读更多
  • D_string.java 文件
package com.ldq.d_string;

public class D_string {
	static {
		System.loadLibrary("Case");
	}

	public native String getCase(String string);

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		D_string d = new D_string();
		String s = "heLLo";
		System.out.println("before change: " + s);
		System.out.println("after change: " + d.getCase(s));
	}

}

 

  • javah -jni com.ldq.d_string.D_string 生成文件 com_ldq_d_string_D_string.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ldq_d_string_D_string */

#ifndef _Included_com_ldq_d_string_D_string
#define _Included_com_ldq_d_string_D_string
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ldq_d_string_D_string
 * Method:    getCase
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_ldq_d_1string_D_1string_getCase
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

 

  • 编写源代码文件 Case.cpp
#include <string.h>
#include "com_ldq_d_string_D_string.h"

JNIEXPORT jstring JNICALL Java_com_ldq_d_1string_D_1string_getCase (JNIEnv *env, jobject obj, jstring string)
{
	const char *s=env->GetStringUTFChars(string,0);
	char s1[16],s2[16];
	strcpy(s1,s);
	strcpy(s2,s);
	strupr(s1);
	strlwr(s2);
	strcat(s1,"_");
	strcat(s1,s2);
	env->ReleaseStringUTFChars(string,s);
	return env->NewStringUTF(s1);
}

 

  • cl /LD Case.cpp 编译生成 Case.dll 文件
  • 拷贝 Case.dll 文件到工程目录,运行 Java 程序 
运行结果
before change: heLLo
after change: HELLO_hello

 

 

 

分享到:
评论

相关推荐

    JNI官方规范中文

    3. **数据类型转换**:JNI提供了多种数据类型转换机制,如将Java的`int`、`double`等类型与C/C++的`jint`、`jdouble`对应,确保数据在Java和本地代码之间安全传递。 4. **对象引用管理**:JNI支持创建、访问和释放...

    java的JNI小联系

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

    安卓NDK RSA 加解密实现

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

    Java小例子(5).rar

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

    Java原生接口.pdf

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

    java实习日记范文3篇.docx

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

    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. 构造压缩命令:视频压缩的命令通常包括选择合适的编码器、设置比特率、分辨率等参数。例如: ``` ...

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

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

    新版Android开发教程.rar

    � 丰富的数据业务,将导致数据流量的显著增加 。 � 手机来源增加,价格更为低廉。 对软件开发者的影响 � 因为 Android 移动软件平台抱持开放互通的观念,势必吸引不少自由软件的拥护者。 � 开发方向有三个重点 :...

Global site tag (gtag.js) - Google Analytics