J'ai un struct C comme ceci:Quel est le mappage JNA correct pour UniChar sous Mac OS X?
struct HFSUniStr255 {
UInt16 length;
UniChar unicode[255];
};
Je cartographié la manière attendue:
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);
}
}
Si j'utilise cette version, je reçois chaque deuxième caractère de la chaîne dans mon omble chevalier [] ("aits D" pour "Macintosh HD".) Je suppose que cela a quelque chose à voir avec être sur une plate-forme 64 bits et JNA mappant la valeur sur un wchar_t 32 bits mais en coupant les 16 bits élevés sur chaque wchar_t en les recopiant. Si j'utilise la version de byte [], j'obtiens des données qui décodent correctement en utilisant le jeu de caractères UTF-16LE. Si j'utilise la version UInt16 [], j'obtiens le bon point de code pour chaque caractère, mais il est alors incommode de les reconvertir en une chaîne.
Existe-t-il un moyen de définir mon type en tant que char [], tout en le convertissant correctement?