如何在 JNI 中将 int 转换为 String(?)?

2024-01-01

我有一个int[ ]数组,我想将它的每个元素转换为String(?) in JNI,最后将它们连接为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 into 字符串类型数据或其他东西,但应该可以在JNI,并将它们连接为String终于!

如果很难做到void返回类型,改一下就可以了!提前致谢!

=================================================== ========================= 新问题:

首先,非常感谢@Jorn Vernee 的回答,这似乎是我应该采取的好方法。然而,当我尝试这种方式时,出现了一个棘手的问题std::字符串流。好吧,即使实例化它也会使应用程序崩溃。而且,遗憾的是我是新手JNI,没有调试 JVM 运行时错误导致的崩溃问题的经验。我查过@Moe Batainehquestion https://stackoverflow.com/questions/39709501/c-jni-crashes-hangs-when-doing-any-io-streams这看起来真的很像我,但是它在 Windows 上应用MiniGW or Cygwin有些事我不知道,所以对我来说很无助。

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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JNI 中将 int 转换为 String(?)? 的相关文章

  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 如何在android asynctask中使用inputstream作为参数?

    我正在制作一个 Android 应用程序来跟踪股票详细信息 我将通过 csv 雅虎财经 检索数据 据我所知 在android 4 0中 网络连接无法在主线程上完成 因此 我将使用 asynctask 来建立连接 但是 我在参数方面遇到了一些
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • Android:监听状态栏通知

    有没有办法在状态栏被下拉时监听通知 1 用于检测状态栏变化 您可以注册一个监听器来获取系统UI可见性变化的通知 因此 要在您的活动中注册侦听器 Detecting if the user swipe from the top down to
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 使用单选按钮更改背景颜色 Android

    我试图通过从单选组中选择单选按钮来更改应用程序选项卡的背景 但是我不确定如何执行此操作 到目前为止我已经 收藏夹 java import android app Activity import android os Bundle publi
  • Android应用程序可以像旧的普通java小程序一样嵌入到网页中吗?

    我对 android 平台一无所知 也无法在互联网上找到这个基本问题的答案 更新 好的 我本身无法嵌入 Android 应用程序 但是我可以在 Android Webbrowser 中嵌入 Java 的东西吗 不可以 您无法将 Androi
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • 如何操作Webkit窗口内的页面内容(使用QT和QTWebKit)?

    请帮助我理解 如何操作 qt webkit 窗口中显示的 html 内容 我需要简单的操作 例如填写输入字段和单击按钮 有这方面的建议 文章吗 请查看下面的示例 它用QWebView http chaos troll no tavestbo
  • 批处理脚本使setlocal变量被其他批处理文件访问

    我正在编写一个批处理文件来从文件中读取路径并将其设置为环境变量 该批处理文件将被许多其他批处理文件使用 调用 来获取变量 在编写批处理文件时 我遇到了变量扩展的问题 所以我使用了SETLOCAL ENABLEDELAYEDEXPANSION
  • 当我使用 GM_setValue 时,Greasemonkey/Tampermonkey 对我的 jQuery 对象做了什么?

    我正在尝试使用以下命令将 DOM 元素选择到 Tampermonkey 变量中GM setValue 以便稍后在不同页面上注入 我创建了一个示例 我可以使用普通 jQuery 来执行此操作 clone 但是当我将其设置为 Tampermon
  • Python 中的协程:最佳实践

    我想知道在 Python 3 中编写协程的最佳实践是什么 我正在开发基本方法 这些方法应该接受一些输入 使用 send 方法 对此输入执行计算 然后产生输出 我发现的第一种方法基本上是执行以下操作 def coroutine func da
  • 如何从 Access 中的对象获取准确的 LastUpdated 日期/时间?

    我正在尝试检索最近更新时间来自 Access 对象的日期 有时它返回 DateCreated 值 我看到相同的查询结果MSys对象 SELECT MSysObjects Name Switch Type 5 Query Type 32768
  • 如何在 UITests 下对单元格重新排序?

    随着UITests and UITableView我需要对单元格重新排序 是否可以 我试过myTable swipeDown 但它是在不响应重新排序的单元格中调用的 我怎样才能做到这一点 有可能吗 如果您已正确设置自定义单元格集的辅助功能属
  • 从多维数组中的特定列获取数组值[重复]

    这个问题在这里已经有答案了 该数组看起来像 arr array array a b array c d array e f 我想获取一个包含第一列中的值的数组 例如array a c e 我知道可以通过迭代数组并将值存储在另一个数组中来轻松
  • iOS 7 上 UITextview 撤消时出现奇怪的崩溃

    我收到了一堆崩溃报告 它们看起来很像下面的内容 但范围值不同 有时范围不是 0 x 而是 2 x 应用具体信息 由于未捕获的异常 NSRangeException 而终止应用程序 原因 NSBigMutableString substrin
  • Visual Studio 智能感知无法在一个 .ascx 文件中工作

    我在 ASP NET MVC 项目的同一文件夹中有两个 ascx 文件 其中之一智能感知工作正常 在另一种情况下 它根本不起作用 有任何想法吗 这些文件非常相似 顶部有相同的 control 定义 使用VS2008和C 尝试重建您的项目 智
  • 使用 FTPClient Java 检索文件内容

    我使用commons FTPCLIENT 我只想从 ftp 服务器获取文件内容 我不想将其写入临时文件 有什么办法可以做到这一点吗 fileoutputstream 应始终指向本地文件 提前致谢 Use FTPClient retrieve
  • 如何使用 git filter-repo 修改远程历史记录?

    过去我用过git filter branch从我的 git 历史记录中删除文件 接下来 我可以强制推送来更新远程存储库 例如 从本地存储库中删除所有 HTML 文件 然后重写远程文件以反映更改 git filter branch force
  • PowerShell 和全局函数

    为什么下面的代码不起作用 根据这篇文章 全局的用法应该是正确的 http technet microsoft com en us library ff730957 aspx http technet microsoft com en us
  • 显示原始值 Entity Framework 7

    我有一个跟踪添加 删除和修改的审核表 我在实体框架内跟踪这一点 而不是使用数据库触发器 原因有多种 但实际上是因为我们使用进程帐户 并且我想跟踪哪些用户对该记录进行了物理更改 我在 EF 5 中使用过此功能 但我不记得在 EF6 中也可以使
  • 在 C++20 模块中用于打破循环依赖的前向声明不起作用

    我已经在这个问题上绞尽脑汁好几天了 我读了很多关于新的 C 20 模块的文档和帖子 其中这个官方的 http www open std org jtc1 sc22 wg21 docs papers 2019 p1103r3 pdf this
  • SpriteKit 的 SKPhysicsBody 与多边形辅助工具

    我想知道是否有一个工具可以用来在 SpriteKit 中轻松生成复杂的物理体 我想要一个具有多边形形状的基于体积的物理实体 SpriteKit 允许使用该方法创建这样的物体 SKPhysicsBody bodyWithPolygonFrom
  • 在 Kotlin 中将元素添加到列表开头的最佳方法是什么

    如果我有一张这样的清单 var foo mutableListOf John Wayne 如果我想在列表顶部添加一个元素 到目前为止我正在考虑两个选项 First foo add 0 Twyla Second foo mutableList
  • c++构造对象时小括号和大括号有什么区别

    有什么区别 and 构造对象时 我认为 应该只支持initializer list或数组 但是当我在片段下方运行时 我感到困惑 include
  • 'This' 在 subscribe 中未定义

    我有一个订阅语句 我正在尝试调试它 但是当我在 VS Code 中单步执行时 this 在语句内始终未定义 在这种情况下 this dataLoaded 未定义 调试时如何让它不被定义 this router events filter e
  • 使用 sed 命令删除绝对路径

    我有包含以下上下文的文件 例如 abc include home user file txt some text 我需要删除包含以及包含后的完整路径 我使用了以下命令删除包含但没有删除路径 sed i r s include g 文件名 我
  • 如何在 JNI 中将 int 转换为 String(?)?

    我有一个int 数组 我想将它的每个元素转换为String in JNI 最后将它们连接为String 包括逗号 例如 java code int testIntArray new int 1 2 3 String arrayString