本文共 5374 字,大约阅读时间需要 17 分钟。
2 | jbyte * arrayBody = env->GetByteArrayElements(data,0); |
3 | jsize theArrayLengthJ = env->GetArrayLength(data); |
4 | BYTE* starter = (BYTE*)arrayBody; |
1 | //jbyteArray 转 c++中的BYTE[] |
3 | jbyte * olddata = (jbyte*)env->GetByteArrayElements(array, 0); |
4 | jsize oldsize = env->GetArrayLength(array); |
5 | BYTE* bytearr = (BYTE*)olddata; |
1 | //C++中的BYTE[]转jbyteArray |
2 | //nOutSize是BYTE数组的长度 BYTE pData[] |
3 | jbyte *by = (jbyte*)pData; |
4 | jbyteArray jarray = env->NewByteArray(nOutSize); |
5 | env->SetByteArrayRegin(jarray, 0, nOutSize, by); |
2 | char* data = (char*)env->GetByteArrayElements(strIn, 0); |
2 | jstring WindowsTojstring(JNIEnv* env,char* str_tmp) |
5 | intslen = (int)strlen(str_tmp); |
6 | unsignedshort* buffer=0; |
9 | rtn = env->NewStringUTF(str_tmp); |
13 | intlength = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)str_tmp, slen, NULL, 0); |
14 | buffer = (unsignedshort*)malloc(length*2+1); |
15 | if(MultiByteToWideChar(CP_ACP, 0, (LPCSTR)str_tmp, slen, (LPWSTR)buffer, length) > 0) |
17 | rtn = env->NewString((jchar*)buffer, length); |
1 | //jstring 转 char* 或者 const char* |
3 | constchar*key = env->GetStringUTFChars(str, 0); |
5 | jsClient->modify(key, isOffer); |
7 | env->ReleaseStringUTFChars(str, key); |
2 | JNIEXPORT jbyteArray JNICALL Java_Test_getByteArray(JNIEnv *env, jobject obj) |
4 | jbyteArray firstMacArray = env->NewByteArray( 6 ); |
6 | jbyte *bytes = env->GetByteArrayElements( firstMacArray, 0); |
7 | for(inti = 0; i <sizeof( pAdapterInfo->Address ); i++ ) |
9 | bytes[ i ] = pAdapterInfo->Address[ i ]; |
12 | env->SetByteArrayRegion(firstMacArray, 0, 6, bytes ); |
2 | char* jstringTostring(JNIEnv* env, jstring jstr) |
5 | jclass clsstring = env->FindClass("java/lang/String"); |
6 | jstring strencode = env->NewStringUTF("utf-8"); |
7 | jmethodID mid = env->GetMethodID(clsstring,"getBytes","(Ljava/lang/String;)[B"); |
8 | jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr, mid, strencode); |
9 | jsize alen = env->GetArrayLength(barr); |
10 | jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE); |
13 | rtn = (char*)malloc(alen + 1); |
14 | memcpy(rtn, ba, alen); |
17 | env->ReleaseByteArrayElements(barr, ba, 0); |
2 | jstring stoJstring(JNIEnv* env,constchar* pat) |
4 | jclass strClass = env->FindClass("Ljava/lang/String;"); |
5 | jmethodID ctorID = env->GetMethodID(strClass,"<init>","([BLjava/lang/String;)V"); |
6 | jbyteArray bytes = env->NewByteArray(strlen(pat)); |
7 | env->SetByteArrayRegion(bytes, 0,strlen(pat), (jbyte*)pat); |
8 | jstring encoding = env->NewStringUTF("utf-8"); |
9 | return(jstring)env->NewObject(strClass, ctorID, bytes, encoding); |
1 | //将jstring类型转换成windows类型 |
2 | char* jstringToWindows( JNIEnv *env, jstring jstr ) |
4 | intlength = (env)->GetStringLength(jstr ); |
5 | constjchar* jcstr = (env)->GetStringChars(jstr, 0 ); |
6 | char* rtn = (char*)malloc( length*2+1 ); |
8 | size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL ); |
11 | (env)->ReleaseStringChars(jstr, jcstr ); |
1 | //将windows类型转换成jstring类型 |
2 | jstring WindowsTojstring( JNIEnv* env,char* str ) |
6 | unsignedshort* buffer = 0; |
8 | rtn = (env)->NewStringUTF(str ); |
11 | intlength = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 ); |
12 | buffer = (unsignedshort*)malloc( length*2 + 1 ); |
13 | if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 ) |
14 | rtn = (env)->NewString( (jchar*)buffer, length ); |
20 | /*JNIEXPORT jstring JNICALL Java_test_cs_web_SWIFTAlianceCASmfTest_strcal |
21 | (JNIEnv *env, jclass obj, jstring jstr1, jstring jstr2) |
25 | char *pszResult = NULL; |
29 | pszSTR1 = jstringTostring(env, jstr1); |
30 | pszSTR2 = jstringTostring(env, jstr2); |
33 | int nlen = sizeof(char)*(strlen(pszSTR1)+strlen(pszSTR2)); |
34 | pszResult = (char*)malloc(nlen); |
35 | strcpy(pszResult, pszSTR1); |
36 | strcat(pszResult, pszSTR2); |
38 | jstring jstrRe = stoJstring(env, pszResult); |
2 | jfieldID byteData = (env)->GetFieldID(clazz,"bData","[B"); |
3 | jbyteArray pDataIn = (jbyteArray) (env)->GetObjectField(objDataIn, byteData); |
4 | jsize theArrayLeng = env->GetArrayLength(pDataIn); |
2 | jbyte * arrayBody = env->GetByteArrayElements(pDataIn,0); |
3 | BYTE* jDataIn = (BYTE*)arrayBody; |
2 | jbyte* byte = (jbyte*)jDataOut; |
3 | jbyteArray jarray = env->NewByteArray(theArrayLeng); |
4 | env->SetByteArrayRegion(jarray, 0, theArrayLeng, byte); |
2 | (env)->SetObjectField(objDataIn,byteData,jarray); |
3 | (env)->SetIntField(objDataIn,pDataInLen,jDataInLen); |
4 | (env)->ReleaseByteArrayElements(pDataIn, arrayBody, 0); |
转载于:https://my.oschina.net/zhuzihasablog/blog/149481