我有一个像这样的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 [](“Aits D”代表“Macintosh HD”。)我假设这与64位相关平台和JNA将值映射到32位wchar_t,然后在复制它们时切断每个wchar_t上的高16位。
如果我使用byte []版本,我会得到使用UTF-16LE字符集正确解码的数据。
如果我使用UInt16 []版本,我会为每个字符获得正确的代码点,但是将它们转换回字符串会很不方便。
有没有什么方法可以将我的类型定义为char [],然后让它正确转换?
答案 0 :(得分:0)
我不这么认为,因为char是一个解码的字节序列。
这就是为什么你的字节版本就像使用手动解码
的魅力一样如果你想坚持使用字符,我建议:
不幸的是,我不知道如何做到这两者中的任何一个。
我的观点:坚持byte[]
verion
顺便问一下,你是如何创建UInt16
课程的?