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

Comparing a jbytearray with a string in JNI

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

我尝试将 jbyteArray memcpy 为无符号字符数据[128],然后对数据执行 memcmp() 和 #define,但 memcpy 使我的应用程序崩溃。

谢谢。

您可以使用 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);
}

我最终使用 GetByteArrayRegion 复制了 jbytearray。