2023-01-20 287
我有一个 int [] 数组,我想将其每个元素转换为 string (?)中的.
例如:
// java code
int testIntArray = new int[]{1, 2, 3};
String arrayString = "";
jni.constructArrayString(testIntArray, arrayString);
// the print content should like this: 1,2,3
System.out.println("ArrayString: " + arrayString);
// jni code
JNIEXPORT void JNICALL constructArrayString (JNIEnv *env, jobject obj, jintArray jArr, jstring jstr) {
// to do sth.
// code maybe like the follow
jint *arr = env -> GetIntArrayElements(jArr, 0);
int len = env -> GetArrayLength(jArr);
char *c_str = env -> GetStringUTFChars(jstr, 0);
if(c_str == NULL) {
return;
}
for(int i = 0; i < len; i++){
// how to concatenate the arr[i], arr[i+1] and the comma ','
// and finally make the arrayString like the string: 1,2,3 ?
}
}
我知道,没有一种直接的方法可以将 int-type 转换为 string-type 数据或其他内容,但应在 jni 中可操作,并将它们作为 string confate -convate -convate -convate -convate -convate -convate!
如果很难使用 void return-type,请更改它! thanx,提前!
=================================================== ==========================
新问题:
首先,谢谢@Jorn Vernee的回答,这似乎是我应该采取的好方法.但是,当我以这种方式尝试时,关于 std :: stringstream 的问题存在一个棘手的问题.好吧,即使实例化它也会崩溃.而且,可悲的是,我是 jni 的新手,没有经验来调试JVM运行时错误的崩溃问题.我已经检查了@moe bataineh 问题看起来像我,但是它适用于 minigw 或 cygwin 我不知道的东西,所以我的hlepless.
jni中的代码类似:
#include "utils_JniInterface.h"
#include <android/log.h>
#include <string.h>
#include <iostream>
#include <sstream>
using namespace std;
#define TAG "JNI-Log"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
JNIEXPORT jstring JNICALL Java_utils_JniInterface_constructRGBArrayString (JNIEnv *env, jobject obj, jintArray jArr){
jint *arr = env -> GetIntArrayElements(jArr, 0);
int len = env -> GetArrayLength(jArr);
std::stringstream result;
for(int i = 0; i < len; i++) {
result << arr[i];
if(i < len - 1) {
result << ',';
}
}
env -> ReleaseIntArrayElements(jArr, arr, 0);
return env -> NewStringUTF(result.str().data());
}
// int[] a = {1,2,3} ⇒ String b = "1,2,3"
关于此问题的好主意或建议?
这个非常直接的:
JNIEXPORT jstring JNICALL Java_Main_callCPP(JNIEnv *env, jclass, jintArray ints) {
jint* jints = env->GetIntArrayElements(ints, 0);
int length = env->GetArrayLength(ints);
std::stringstream result;
for(int i = 0; i < length; i++) {
result << jints[i];
if(i < length - 1) {
result << ',';
}
}
env->ReleaseIntArrayElements(ints, jints, JNI_ABORT);
return env->NewStringUTF(result.str().data());
}
java签名将在哪里:
private static native String callCPP(int[] ints);
(当然,名称可以是您想要的任何东西).和用法:
int[] ints = { 1, 2, 3 };
String result = callCPP(ints);
System.out.println(result); // prints '1,2,3'
有用的链接:
当使用 std :: stringstream 时,我也有以下错误;
致命错误:未找到’sstream’文件
#include <sstream>
^ 1产生的错误.
帮助我的解决方案是创建一个名为” application.mk=””>”的文件(注意:case敏感).您需要添加的唯一行是:
app_stl:= stlport_static
将” application.mk “文件放在您的” jni”文件夹中,这是同一位置您的” android.mk”文件.这在Eclipse中为我工作,我可以认为它也适用于Android Studio.
这是与替代方案的链接: android NDK构建iostream:没有这样的文件或目录
以上所述是小编给大家介绍的如何将int转换为jni中的string(?)?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26179.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态