将jbytearray与JNI中的字符串进行比较

时间:2015-03-19 03:31:04

标签: android c android-ndk java-native-interface

我有一个JNI C函数,它有一个jbyteArray输入参数。这是一个大小为128的字节数组,我希望与#define字符串进行比较。我如何实现这一目标?

我试图将jbyteArray memcpy到unsigned char数据[128],然后执行memcmp()数据和#define,但是memcpy崩溃了我的应用程序。

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用GetByteArrayElements()来获取字节数组内容,然后使用strncmp或memcmp或其他任何内容进行比较:

#define COMPARE_STRING "somestring" // can be up to 128 bytes long

// JNIEnv *pEnv
// jbyteArray byteArray

// get the byte array contents:
jbyte* pBuf = (jbyte*)(*pEnv)->GetByteArrayElements(pEnv, byteArray, 0);
if(pBuf)
{
    // compare up to a maximum of 128 bytes:
    int result = strncmp((char*)pBuf, COMPARE_STRING, 128);
}

答案 1 :(得分:0)

我最后使用GetByteArrayRegion复制了jbytearray。