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;
网友评论