Java Mac OS X上UniChar的正确JNA映射是什么?
我有这样一个C结构: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
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
类的