#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#include <vcclr.h>
using namespace System;
using namespace System::Text;
// jstring To String
String^ jstringToStr(JNIEnv* env, jstring jstr)
{
char* str = jstringTostring(env, jstr);
String^ value = gcnew String(str);
free(str);
return value;
}
// jstring To char*
char* jstringTostring(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
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)
{
rtn = (char*)malloc(alen + 1);
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
env->ReleaseByteArrayElements(barr, ba, 0);
return rtn;
}
// String To jstring
jstring strTojstring(JNIEnv* env, String^ rtn)
{
pin_ptr<const wchar_t> wch = PtrToStringChars(rtn);
size_t convertedChars = 0;
size_t sizeInBytes = ((rtn->Length + 1) * 2);
char *ch = (char *)malloc(sizeInBytes);
errno_t err = wcstombs_s(&convertedChars,
ch, sizeInBytes,
wch, sizeInBytes);
jstring js = stringTojstring(env, ch);
free(ch);
return js;
}
// char* To jstring
jstring stringTojstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
jstring encoding = env->NewStringUTF("utf-8");
return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
}
std::string jstring2str(JNIEnv* env, jstring jstr)
{
char
* rtn = NULL;
jclass clsstring = env->FindClass(
"java/lang/String"
);
jstring strencode = env->NewStringUTF(
"GB2312"
);
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
)
{
rtn = (
char
*)malloc(alen+
1
);
memcpy(rtn,ba,alen);
rtn[alen]=
0
;
}
env->ReleaseByteArrayElements(barr,ba,
0
);
std::string stemp(rtn);
free(rtn);
return
stemp;
}
转自:http://dncsoft.iteye.com/blog/1010213
http://www.cnblogs.com/lichien/archive/2011/10/11/2206828.html
相关推荐
C++调用java java调用C++ 字符串参数传递 类型的转换
jstring string=(*env)->GetObjectArrayElement(env,cmdline,i); const char* tmp=(*env)->GetStringUTFChars(env,string,0); argv[i]=(char*)malloc(sizeof(char)*1024); strcpy(argv[i],tmp); } ffmpeg...
jni使用string相互调用 Java 传递 String 给C C 传递 jstring 给 Java
【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 ) ... 字符串转换 ( jstring -> char* ) VI . 字符串释放 VII . 部分代码示例
这是我写的android jni jstring的demo,共享一下
将错误的amr文件修复后并保存。部分代码。 /* DO NOT EDIT THIS FILE - it is machine generated */ #include ... (JNIEnv *env, jobject jot, jstring _path); #ifdef __cplusplus } #endif #endif
jni学习例子 在linux下java调用so执行成功 java类型转成c类型 jstring 转char 相应的.so跟c跟.h跟点lib*.so都有,可以直接运行的
Android 提供了现成 android.os.PowerManager 类 , 类中 提供newWakeLock(int flags, String tag)方法 来取得 应用层的锁, 此函数的定义 frameworks/base/core/java/android/os/PowerManager.java 应用程序 在...
java调用native方法流程主要有两...String 转换为jstring类型;其他内置类型及自定义类型全部转换为jobject; 一般情况下,java调用native方法会比正常的函数调用效率低一个数量级,参数越多越复杂,对效率的影响越大。
String jString = jsonObject2.toString(); String key1 = varName[i]; object = pasrsJsonStrMultT(jString, key1, cls1); } else { type = type.replace("class ", ""); Class cls1 ...
public static function decode(jstring:String):Object 可以很好地将JSon字符串转换为Flex对象,很方法JParser.encode()正好相反,其它的使用请参考JSwoof官方网站的文档:...
Java 多资源包
将魔兽内的字符串类型,字符串索引以及C的char类型 相互转换,和怎样查找这些关键call!!
Json 库需要 Swift 1.2 github "Ushio/EnumJson"Json 的定义 public enum Json { case JObject ([String : Json]) case JArray ([Json]) case JNumber (NSNumber) case JString (String) case JBoolean (Bool) case ...
对QT的C ++端的JNI调用public static native void setUrl(String url) C ++实现openurlclient.cpp JNI调用的实现 JNIEXPORT void JNICALL Java_poc_intent_OpenUrlClient_setUrl(JNIEnv *env, jobject obj, ...
最终确认这是在Android 5.1以下 jstring -> char数组 时出的问题。下面通过一个示例来还原这个过程。 事件还原 假设有一个字符串s,String s = \uD83D\uDC8B; ,对应表情:kiss_mark:。通过调用getBytes()方法,会...
2. 编写HelloJni工程,在主Activity(本例:HelloJni.java)里声明native函数: 如下: public native String stringFromJNI(); public native double add(double a, double b); public native double sub...
康多·杰森 一个库,可快速安全地对Json进行序列化/反序列化,而无需反射或生成器。 在功能附加概念的启发下, ... val jsonString = JString .toJson( " my string is here " ) val value = JString .fromJson(js
public String dwrtest(String a, String b, List<String> s,Map<String,String>map) { StringBuilder strbui = new StringBuilder(); strbui.append(a).append(",").append(b).append(","); for (String str ...
KondorJson一个库,可快速安全地对Json进行序列化/反序列化,而无需反射或...Gradle实现'com.ubertob.kondor:kondor-core:1.3.2'快速入门将值(在这种情况下为字符串)与Json相互转换:val jsonString = JString.to