java - jstring 到 char* 在 c 用法中未转换为可打印格式

标签 java c java-native-interface zos invocation-api

我正在使用 C 的 z/os 上的调用 API 运行一个简单的 JNI 程序。Java 程序有一个简单的 sayHello() 方法,就像这样-

public static String sayHello(){
    return "Hello World!!!";
}

调用此方法并打印输出的代码如下-

jmethodID mid=(*env)->GetStaticMethodID(env,cls2,sHStr,sigVoidString);
 jstring j = (jstring)(*env)->CallStaticObjectMethod(env,cls2, mid);
 const char *str = (*env)->GetStringUTFChars(env, j, NULL);
 printf("%s", str);
 (*env)->ReleaseStringUTFChars(env,j,str);

输出打印如下-

..%%?..?.%.

打开HEX显示如下,说明确实是HelloWorld!!!-

46666256766222
85CCF07F2C4111

我检查了一些关于相同问题的 SO 帖子,例如 thisthis每个人都建议使用我正在使用但没有成功的 GetStringUTFChars。这里有什么特定于 z/os 的事情吗?

最佳答案

在这种情况下,__atoe() 函数的使用对我有用。

关于java - jstring 到 char* 在 c 用法中未转换为可打印格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33496453/

相关文章:

java - Noob JSP + Servlet + EJB 构建J2EE简单Web项目的资料

c - 多线程平均每次操作成本

c - OpenGL 应用程序中的 GL_Invalid_Operation

java - 安卓 native : How to deallocate object after returning from native layer

c++ - JNI : How to convert a group of data from c++ to Java

java - 如何使用 Spinner 下拉菜单更改 TextView 小部件上的文本

java - JavaBean 和 Spring bean 的区别

java - 如何遍历对象列表并分配 child ?

c - 如何检查用户输入的数据类型是否正确

java - JNI 栈顺序误解