C 标准库函数的 Java 等价物

标签 java c java-native-interface jna

我想不出更好的标题,所以就在这里。我试图找出从 C 的 stdlib 访问方法的最佳方式(在效率和代码清晰的情况下)。背景是我试图获得 mbstowcs 的功能。在 Java 程序中。现在在我的 C 代码中我得到了这个:

const char* source = "D:\\test3\\source\\test.txt";
SName tmp1;
mbstowcs((wchar_t*)tmp1, source, 32 - 1);

SNametypedef unsigned short SName[32]。稍后在代码中 tmp1 被用作输入参数:

status = copyFilePath(tmp1, tmp2, info, &context);

我基本上想做的是使用 JNA 从 Java 端调用此 copyFilePath。诀窍是我需要在 Java 程序中对 C 的 mbstowcs 进行类似的转换,以便稍后我可以直接调用此函数而无需任何额外处理。现在在我看来,我需要使用 JNI 的额外 C 代码,这样我才能从 stdlib 获得 mbstowcs 的包装器。

还有一个问题,Java 是否有任何类似的方法将多字节字符串转换为宽字符字符串,就像在 C/C++ 中一样,以便全部解决?

最佳答案

不是回答问题,而是试图帮助解决问题。 JNA 有 com.sun.jna.WString。如果您调用带有 WString 参数的函数,它将在 native 代码中显示为宽字符串。您只需确保您的编码正确。

不用 function.invoke(myString); 在 native 端为您提供多字节字符串,只需使用 function.invoke(new WString(myString));

关于C 标准库函数的 Java 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52260592/

相关文章:

Java如何从单独的线程中获取调用者?

java - 将基于 Java OpenGL 的 Android 游戏移植到 iOS(无 native 代码)

c - 函数调用的误区

c 宏,数组定义作为参数

c - Makefile.am 中应该出现什么以及将库链接到带有 Autotools 的程序的源代码?

java - 如何在加载 DLL 时加载 JVM 并在卸载 DLL 时释放它

java 。编译/执行 2 .java 1 包命令行

java - spring 处理存储库方法的方法

java - registerNatives() 方法有什么作用?

java - UnsatisfiedLinkError问题