Привет ! Меня зовут Ксавье Жувено, и в этом небольшом посте я объясню, как преобразовать Java jintArray
в C++ std::vector
.
Самореклама. Другие статьи по Android-разработке вы можете найти на моем сайте 😉
Решение
Для людей, которым нужно только решение, чтобы быстро скопировать и вставить его в код, вот оно 😉
extern "C" JNIEXPORT jstring JNICALL Java_com_example_project_class_method(JNIEnv *env, jobject /* this */, jintArray arr) {
jsize size = env->GetArrayLength( arr );
std::vector input( size );
env->GetIntArrayRegion( arr, jsize{0}, size, &input[0] );
}
Объяснение
Если вы читаете это, возможно, вы хотите понять, как предыдущее решение достигает цели преобразования jintArray
в std::vector<jint>
, и это то, что я попытаюсь объяснить. 🙂
Прежде всего, мы получаем размер jintArray
с помощью метода JNIEnv GetArrayLength
и сохраняем эту информацию в переменной.
Затем, используя эту информацию, мы можем создать std::vector нужного размера.
И, наконец, мы копируем элементы из jintArray
в std::vector
, используя метод JNIEnv GetIntArrayRegion
, предоставляя ему всю необходимую информацию: jintArray
, индекс, с которого следует начать копирование, размер массива и местоположение куда копировать массив.
Спасибо всем за прочтение этой статьи, и до моей следующей статьи, хорошего дня 😉
Интересные ссылки
Первоначально опубликовано на http://10xlearner.com 8 мая 2020 г.