我正在使用
bindbc.sfml
用 D 语言编写 SFML 应用程序。此 SFML 绑定中 Unicode 的系统剪贴板函数获取并返回 Unicode 剪贴板文本作为 const(uint)*
,其中 uint
是 Unicode 代码。
如何将其与 dlang 字符类型(例如 wchar[]
或 wstring
)相互转换?
我发现对于在 uint
中给出单个 event.text.unicode
代码的 SFML 文本输入事件,我可以执行以下操作:
wstring ws = cast(wstring)[event.text.unicode];
但是如何处理像
const(uint)*
这样的指针呢?它甚至是指向 uint
数组的指针还是我弄错了?
经过多次尝试和错误方法后,我得到的最好的结果是
// copied text: Hello
const(uint)* ct = cfClipboard_getUnicodeString();
writeln(to!wstring(*ct)); // prints 72
仅给出剪贴板文本中的第一个字符,但作为 unicode 代码(例如,97 表示拉丁语
a
)
还有这个
// copied text: Hello
const(uint)* ct = cfClipboard_getUnicodeString();
writeln(cast(wstring)[*ct]); // prints H
它也只给出第一个字符,但作为可打印的
char
。
我不确定
cfClipboard_getUnicodeString
的原型在哪里,但如果它返回 uint*
,它可能是指向 dchar
代码点的指针。
谨慎地说,我想说答案是
uint*
是一个以零结尾的 utf32 代码点数组。我会尝试的是:
import std.string;
auto dstr = fromStringz(cast(const(wchar)*)ct);
如果这不起作用,请告诉我该函数的定义位置,我们可以从那里开始。