3
我有一個C結構是這樣的:Mac OS X上的UniChar正確的JNA映射是什麼?
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);
}
}
如果我用這個版本,我得到的字符串的第二個字符到我的焦炭[](「Aits D」爲「Macintosh HD」)。我假設這是與64位平臺和JNA將值映射到32位wchar_t,然後切斷高16位在每個wchar_t上覆制它們。
如果我使用byte []版本,我會得到使用UTF-16LE字符集正確解碼的數據。
如果我使用UInt16 []版本,我會爲每個字符獲取正確的代碼點,但將它們轉換回字符串會很不方便。
是否有某種方式可以將我的類型定義爲char [],但它是否正確轉換?