美文网首页
JNI开发 java jbyteArray跟 c++ std::

JNI开发 java jbyteArray跟 c++ std::

作者: RemiscreRoy | 来源:发表于2020-10-20 16:51 被阅读0次

    jbytearray转std::String

    c++中 因为char* 默认以‘\0’为结束符,导致转换后的长度不正确,所以转换char*时一定要指定长度.

    1.第一种方式

        jbyteArray bytes_;
        char *chars;
        jbyte *bytes;
        bytes = env->GetByteArrayElements(bytes_, JNI_FALSE);
        int chars_len = env->GetArrayLength(bytes_);
        chars = new char[chars_len + 1];
        memset(chars, 0, chars_len + 1);
        memcpy(chars, bytes, chars_len);
        chars[chars_len] = 0;
        env->ReleaseByteArrayElements(bytes_, bytes, 0);
        jsize alen = env->GetArrayLength(bytes_); 
        std::string inText(chars, alen);
        return inText;
    

    2.第二种方式

        int chars_len = env->GetArrayLength(bytes_);
        std::string  pubkey;
        pubkey.assign((char*)env->GetByteArrayElements(bytes_,JNI_FALSE),chars_len);
        return pubkey;
    

    std::String转jbyteArray

        std::string outText;
        auto *by = (jbyte *) outText.c_str();
        jbyteArray jarray = env->NewByteArray(outText.length());
        env->SetByteArrayRegion(jarray, 0, outText.length(), by);
        return jarray;
    

    相关文章

      网友评论

          本文标题:JNI开发 java jbyteArray跟 c++ std::

          本文链接:https://www.haomeiwen.com/subject/hmclmktx.html