Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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
Java 如何在C++;到爪哇_Java_Android_C++_Java Native Interface_Type Conversion - Fatal编程技术网

Java 如何在C++;到爪哇

Java 如何在C++;到爪哇,java,android,c++,java-native-interface,type-conversion,Java,Android,C++,Java Native Interface,Type Conversion,我有一个关于数据类型的问题,我想在开始编码之前弄清楚它!假设我有一个C++方法,它返回一个数组,或者是一个双倍的缓冲区。然后我需要使用JNI头将这个double[]转换成jdouble,这样Java就可以处理数据了 我的第一个问题是我应该配置我的C++方法来返回一个双打数组,还是一个双打缓冲区。我知道它们几乎一样,但不知道哪一个更好。另外,如何以Java可以理解的方式转换缓冲区 这就是我到目前为止所做的: JNIEXPORT jdouble[] JNICALL Java_Test_getDoub

我有一个关于数据类型的问题,我想在开始编码之前弄清楚它!假设我有一个C++方法,它返回一个数组,或者是一个双倍的缓冲区。然后我需要使用JNI头将这个double[]转换成jdouble,这样Java就可以处理数据了

我的第一个问题是我应该配置我的C++方法来返回一个双打数组,还是一个双打缓冲区。我知道它们几乎一样,但不知道哪一个更好。另外,如何以Java可以理解的方式转换缓冲区

这就是我到目前为止所做的:

JNIEXPORT jdouble[] JNICALL Java_Test_getDouble[](JNIEnv *env, jobject obj) 
{
      double[] temp= new double[someSize];
      temp = // call my C++ code

      jdouble result = new jdouble[someSize];
      for(i = 0; i < someSize; i++)
           converting double in temp to jdouble in result;

       return result;     
}
JNIEXPORT jdouble[]JNICALL Java_Test_getDouble[](JNIEnv*env,jobject obj)
{
double[]temp=新的double[someSize];
TEMP=//调用我的C++代码
jdouble result=newjdouble[someSize];
对于(i=0;i
然后Java可以对数据做任何它想做的事情

我的代码有意义吗?我读了一些关于
ByteGetElement()
的帖子,但我不知道它是否可以在这里应用。如果你能给我一个简单的例子,这将是非常有帮助的。最后,我仍然需要知道是应该使用数组还是双精度缓冲区


非常感谢。

就C而言,jdouble实际上等于double

// just for the sake of the example  this buffer exists and holds the double values in C
double* sourceBuffer;

// allocate the jdouble Array
jdoubleArray output = (*env)->NewdoubleArray(env, someSize);

// check if it was allocated correctly
if (NULL == output) return NULL;

// commit the contents of the double* array (sourceBuffer in this example) into the Java array 
(*env)->SetDoubleArrayRegion(env, result, 0, someSize, sourceBuffer);
return result;

这可能会有帮助,这是一个整数数组,但我想double的方法是类似的。啊,非常有用,让我来研究一下,谢谢