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

2020-10-20  本文已影响0人  RemiscreRoy

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;
上一篇下一篇

猜你喜欢

热点阅读