我想不出更好的标题,所以就在这里。我试图找出从 C 的 stdlib 访问方法的最佳方式(在效率和代码清晰的情况下)。背景是我试图获得 mbstowcs 的功能。在 Java 程序中。现在在我的 C 代码中我得到了这个:
const char* source = "D:\\test3\\source\\test.txt";
SName tmp1;
mbstowcs((wchar_t*)tmp1, source, 32 - 1);
SName
是 typedef 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/