123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- //
- // Created by #Suyghur, on 2021/10/15.
- //
- #include "include/yylog.h"
- #include "include/tool_kit.h"
- jbyteArray ToolKit::GetJbyteArray(JNIEnv *Env, const char *src) {
- return nullptr;
- }
- jstring ToolKit::GetJString(JNIEnv *env, const char *src) {
- jclass clz = env->FindClass("java/lang/String");
- jmethodID methodID = env->GetMethodID(clz, "<init>", "([BLjava/lang/String;)V");
- jstring encoding = env->NewStringUTF("utf-8");
- auto length = static_cast<jsize>(strlen(src));
- jbyteArray bytes = env->NewByteArray(length);
- env->SetByteArrayRegion(bytes, 0, length, (jbyte *) src);
- auto result = (jstring) env->NewObject(clz, methodID, bytes, encoding);
- env->DeleteLocalRef(clz);
- env->DeleteLocalRef(encoding);
- env->DeleteLocalRef(bytes);
- return result;
- }
- std::string ToolKit::JString2String(JNIEnv *env, jstring src) {
- if (env == nullptr || src == nullptr) {
- LOGE("jstring to string has some error");
- return "";
- }
- char *tmp_ptr = nullptr;
- jclass clz = env->FindClass("java/lang/String");
- jstring encode_mode = env->NewStringUTF("UTF-8");
- jmethodID mid = env->GetMethodID(clz, "getBytes", "(Ljava/lang/String;)[B");
- auto byte_array = (jbyteArray) (env->CallObjectMethod(src, mid, encode_mode));
- jsize len = env->GetArrayLength(byte_array);
- if (len == 0) {
- free(tmp_ptr);
- return "";
- }
- jbyte *byte = env->GetByteArrayElements(byte_array, JNI_FALSE);
- if (len > 0) {
- tmp_ptr = (char *) malloc(len + 1);
- memcpy(tmp_ptr, byte, len);
- tmp_ptr[len] = 0;
- }
- env->ReleaseByteArrayElements(byte_array, byte, JNI_FALSE);
- std::string result(tmp_ptr);
- free(tmp_ptr);
- env->DeleteLocalRef(clz);
- env->DeleteLocalRef(encode_mode);
- env->DeleteLocalRef(byte_array);
- return result;
- }
|