【问题标题】:Comparing a jbytearray with a string in JNI将 jbytearray 与 JNI 中的字符串进行比较
【发布时间】:2015-03-19 03:31:03
【问题描述】:

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您可以使用 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。那行得通。
    【解决方案2】:

    我最终使用 GetByteArrayRegion 复制了 jbytearray。

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 1970-01-01
      • 2012-10-06
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多