JNI常用类型转换

栏目: Java · 发布时间: 7年前

内容简介:而
std::string hello = "Hello from C++";
jstring jHello=env->NewStringUTF(hello.c_str());
复制代码

char*转jstring

jstring util_char_to_jstring(JNIEnv *env, const char *pat) {
    //定义java String类 strClass
    jclass strClass = (env)->FindClass("java/lang/String");
    //获取String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
    jmethodID ctorID = (env)->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
    //建立byte数组
    jbyteArray bytes = (env)->NewByteArray(strlen(pat));
    //将char* 转换为byte数组
    (env)->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte *) pat);
    // 设置String, 保存语言类型,用于byte数组转换至String时的参数
    jstring encoding = (env)->NewStringUTF("utf-8");
    //将byte数组转换为java String,并输出
    return (jstring) (env)->NewObject(strClass, ctorID, bytes, encoding);
}
复制代码

jstring转char*:

void util_jstring_to_char(JNIEnv *env, jstring jstr, char *result) {
    if (env == NULL || jstr == NULL) {
        return;
    }
    jclass clsstring = env->FindClass("java/lang/String");
    jstring strencode = env->NewStringUTF("utf-8");
    jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
    jbyteArray barr = (jbyteArray) env->CallObjectMethod(jstr, mid, strencode);
    jsize alen = env->GetArrayLength(barr);
    jbyte *ba = env->GetByteArrayElements(barr, JNI_FALSE);
    if (alen > 0) {
        memcpy(result, ba, alen);
        result[alen] = 0;
    }
    env->ReleaseByteArrayElements(barr, ba, 0);
}

复制代码

char* 是可以直接赋值给 string 的:

string s;
 char *p = "hello";//直接赋值
 s = p;
复制代码

int转string

string util_int_to_string(unsigned int n) {
    string sResult;
    stringstream ssTmp;
    ssTmp << n;
    ssTmp >> sResult;
    return sResult;
}
复制代码

JByteArray转char*

char *convertJByteArrayToChar(JNIEnv *env, jbyteArray byYUV1_) {

    jbyte *bytes = env->GetByteArrayElements(byYUV1_, 0);
    int arrayLength = env->GetArrayLength(byYUV1_);
    char *chars = new char[arrayLength + 1];
    memset(chars, 0x0, arrayLength + 1);
    memcpy(chars, bytes, arrayLength);
    chars[arrayLength] = 0;
    env->ReleaseByteArrayElements(byYUV1_, bytes, 0);

    return chars;
}
复制代码

char*转JByteArray

jbyteArray util_char_to_jbyteArray(JNIEnv *env, char *data, int length) {
    jbyte *by = (jbyte *) data;
    jbyteArray jarray = env->NewByteArray(length);
    env->SetByteArrayRegion(jarray, 0, length, by);
    return jarray;
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithm Analysis in Java

Data Structures and Algorithm Analysis in Java

Mark A. Weiss / Pearson / 2011-11-18 / GBP 129.99

Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course wa......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码