Java Mac OS X上UniChar的正确JNA映射是什么?

Java Mac OS X上UniChar的正确JNA映射是什么?,java,unicode,macos-carbon,jna,Java,Unicode,Macos Carbon,Jna,我有这样一个C结构: struct HFSUniStr255 { UInt16 length; UniChar unicode[255]; }; 我以预期的方式映射了这一点: public class HFSUniStr255 extends Structure { public UInt16 length; // UInt16 is just an IntegerType with length 2 for convenience. public /*Uni

我有这样一个C结构:

struct HFSUniStr255 {
    UInt16 length;
    UniChar unicode[255];
};
我以预期的方式映射了这一点:

public class HFSUniStr255 extends Structure
{
    public UInt16 length; // UInt16 is just an IntegerType with length 2 for convenience.

    public /*UniChar*/ char[] unicode = new char[255];
    //public /*UniChar*/ byte[] unicode = new byte[255*2];
    //public /*UniChar*/ UInt16[] unicode = new UInt16[255];

    public HFSUniStr255()
    {
    }

    public HFSUniStr255(Pointer pointer)
    {
        super(pointer);
    }
}
如果我使用这个版本,我会将字符串的每一个字符都放入我的char[](“Macintosh HD”的aits D)。我假设这与在64位平台上以及JNA将值映射到32位wchar\t有关,但在将每个wchar\t上的高16位拷贝回来时,会将其切掉

如果我使用byte[]版本,我将获得使用UTF-16LE字符集正确解码的数据

如果我使用UInt16[]版本,我会为每个字符获得正确的代码点,但是将它们转换回字符串很不方便


有没有什么方法可以将我的类型定义为char[],并将其正确转换?

基本上我不这么认为,因为char是一个解码的字节序列

这就是为什么你们的字节版本像一个魔咒一样手工解码

如果您想继续使用chars,我建议:

  • 你用解码器钩住JNA
  • 或者将字符的数字形式从UTF-16LE转换为内部JVM字符集,即unicode
不幸的是,我不知道一个简单的方法来做这两件事

我的意见是:坚持使用
byte[]
verion


顺便问一下,您是如何创建
UInt16
类的