Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较Android NDK中的两个jbyte数组_Android_Arrays_Android Ndk_Java Native Interface_Byte - Fatal编程技术网

如何比较Android NDK中的两个jbyte数组

如何比较Android NDK中的两个jbyte数组,android,arrays,android-ndk,java-native-interface,byte,Android,Arrays,Android Ndk,Java Native Interface,Byte,我是新的NDK和学习 我设法从java代码中调用本机方法,但不知道如何比较两个jbyte数组 以下是我所拥有的: jbyte bytes1[] = {48, -126, 1,4}; jbyte bytes2[] = {48, -126, 1,4}; jclass cls = (*env)->GetObjectClass(env, bytes1); jmethodID mid = (*env)->GetMethodID(env, cls, "equals", "([B)Z

我是新的NDK和学习

我设法从java代码中调用本机方法,但不知道如何比较两个
jbyte
数组

以下是我所拥有的:

 jbyte bytes1[] = {48, -126, 1,4};
 jbyte bytes2[] = {48, -126, 1,4};

 jclass cls = (*env)->GetObjectClass(env, bytes1);
 jmethodID   mid = (*env)->GetMethodID(env, cls, "equals", "([B)Z");
 jboolean isEqual = (*env)->CallBooleanMethod(env, bytes1, mid, bytes2);

我知道上面的代码是错误的,但是有没有比较字节数组的正确方法如果需要比较两个jbyte数组,请使用memcmp

#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);

由于它们是字节数组,您确定需要equals方法的功能吗?您可以为它编写自己的自定义代码,在循环中逐字节比较它们。JByg解析为字节,所以它将工作。对前面的注释进行修正:JByg解析为Android中的符号char。@ java中的THOMASCALC字节是8位签名的二进制补码整数。要在C++代码中或java代码中比较它们吗?答案是不同的。@我们正在谈论基于OP帖子的C++代码。在Android中,在本机头文件中,jbyte被定义为有符号字符(这正好对应于您所说的:8位有符号整数)。我只是指出OP可以使用自定义代码(而不是调用Equals)来实现他的目标。这基本上也是公认的答案所包含的内容。感谢它对硬编码值起到了作用。您知道如何将
jbyteArray
与c中的某个harcoded值(
jbyte[]
)进行比较吗。其中
jbyteArray
从java代码传递到本机代码。再次感谢。我使用
GetByteArrayRegion(env,src,0,10,dest)将
jbyteArray
转换为
jbyte[]
jboolean isEqual = (memcmp(bytes1, bytes2, 4) == 0);