将 Unicode const(uint)* 转换为 dlang 字符类型

问题描述 投票:0回答:1

我正在使用

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

sfml d
1个回答
0
投票

我不确定

cfClipboard_getUnicodeString
的原型在哪里,但如果它返回
uint*
,它可能是指向
dchar
代码点的指针。

谨慎地说,我想说答案是

uint*
是一个以零结尾的 utf32 代码点数组。我会尝试的是:

import std.string;
auto dstr = fromStringz(cast(const(wchar)*)ct);

如果这不起作用,请告诉我该函数的定义位置,我们可以从那里开始。

© www.soinside.com 2019 - 2024. All rights reserved.