gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:35:33 26 4
gpt4 key购买 nike

我有一个像这样的 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[],并使其正确转换吗?

最佳答案

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

这就是为什么你的字节版本可以像手动解码一样工作

如果你想坚持使用字符,我建议:

  • 你用解码器连接 JNA
  • 或者将您获得的 UTF-16LE 字符数字形式转换为内部 JVM 字符集,即 unicode

不幸的是,我不知道有什么简单的方法可以做到这两者中的任何一个。

我的意见:坚持使用byte[]版本

<小时/>

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

关于java - Mac OS X 上 UniChar 的正确 JNA 映射是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com