(1)java 中的String(jstring) 转换成C的 char * 类型 : JNIEXPORT jint JNICALL Java_com_example_libdemo_类名_Init (JNIEnv *jenv, jclass jc, jstring jdevName) { char* devName = (char *)(jenv->GetStringUTFChars(jdevName, 0)); char gDevName2[128] = {0}; strcpy(gDevName2, devName); jenv->ReleaseStringUTFChars(jdevName, devName); return 0; }
(2)C的unsigned char转换成Java的jbyteArray类型: JNIEXPORT jbyteArray JNICALL Java_com_example_libdemo_类名_func (JNIEnv *jenv, jclass jc) { unsigned char res[3074] = {0x10, 0x0a,0x0b,0x0c,0x0e, 0x0f}; unsigned int resLen = 6; jbyteArray jres = NULL; jres = jenv->NewByteArray(resLen); jenv->SetByteArrayRegion(jres, 0, resLen, (jbyte*)res); return jres; } (3)java中调用 func byte[] recvData = 类名.func(); if (recvData != null) { // 在文本框中显示 EditText editText3 =(EditText)findViewById(R.id.editText3); editText3.setText(byteArrayToHex(recvData).toCharArray(), 0, byteArrayToHex(recvData).length()); }Java byteArrayToHex实现: public static String byteArrayToHex(byte[] a) { StringBuilder sb = new StringBuilder(); for(byte b: a) sb.append(String.format("x", b&0xff)); return sb.toString(); }
C 字符串转成十六进制,例如字符串“0084000008”转换成 十六进制 00 84 00 00 08
static void tohex(char *hh, unsigned char *dd,int len) { int i = 0; char h1,h2; unsigned char s1,s2; for (i=0;i<len;i++){ h1 = hh[2*i]; h2 = hh[2*i+1]; s1 = toupper(h1) - 0x30; if (s1 > 9) s1 -= 3; s2 = toupper(h2) - 0x30; if (s2 > 9) s2 -= 3; dd[i] = s1*16 + s2; } } //用EditText前,请先:import android.widget.EditText; //获取文本框1的文本 String str1=""; EditText editText1 =(EditText)findViewById(R.id.editText1); str1=editText1.getText().toString(); //将文本框1的文本赋给文本框2 EditText editText2 =(EditText)findViewById(R.id.editText2); editText2.setText(str1.toCharArray(), 0, str1.length());