使用AndroidNDK测试Linux驱动 第2页
30. wordcount = (jint) n;
31. // 关闭/dev/wordcount设备文件
32. close(dev);
33. // 返回单词数
34. return wordcount;
35.}
36.// 将jstring类型的值转换成char *类型的值
37.char* jstring_to_pchar(JNIEnv* env, jstring str)
38.{
39. char* pstr = NULL;
40. // 下面的代码会调用Java中的String.getBytes方法获取字符串的字节数
41.
42. // 获取java.lang.String类
43. jclass clsstring = (*env)->FindClass(env, "java/lang/String");
44. // 将字符串“utf-8”转换成jstring类型的值
45. jstring strencode = (*env)->NewStringUTF(env, "utf-8");
46. // 获取java.lang.String.getBytes方法
47. jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B");
48. // 调用String.getBytes方法将str变量的值转换成jbytearray类型的值
49. jbyteArray byteArray = (jbyteArray)( (*env)->CallObjectMethod(env, str, mid, strencode));
50. // 获取字节长度
51. jsize size = (*env)->GetArrayLength(env, byteArray);
52. // 将jbytearray类型的值转换成jbyte*类型的值
53. jbyte* pbyte = (*env)->GetByteArrayElements(env, byteArray, JNI_FALSE);
54. if (size > 0)
55. {
56. // 为char*类型变量pstr分配空间
57. pstr = (char*) malloc(size);
58. // 将pbyte变量中的值复制到pstr变量中
59. memcpy(pstr, pbyte, size);
60. }
61. // 返回转换后的值
62. return pstr;
63.}
64.// JNI函数:writeStringToDev
65.// 用于向/dev/wordcount设备文件写入字符串
66.void Java_mobile_android_word_count_ndk_WordCountNDKTestMain_writeStringToDev(
67. JNIEnv* env, jobject thiz, jstring str)
68.{
69.
70. int dev; // open函数打开/dev/wordcount设备文件后返回的句柄,打开失败返回-1
71. // 以只写方式打开/dev/wordcount设备文件
72. dev = open("/dev/wordcount", O_WRONLY);
73. // 将jstring类型字符串转换成char* 类型的值
74. char