将 dlang char/wchar 转换为 string/wstring
Convert dlang char/wchar to string/wstring
如何将 d 中的单个 char/wchar 转换为单个字符 string/wstring?我在网上找不到任何不谈论 char* 或 wchar* 的内容。
有几种不同的选择。一种是通过获取指针的地址来获取指针。你通常不应该使用它,但你应该知道它是可能的。
char a = 'a';
char[] b = (&a)[0 .. 1]; // &a gets a pointer, [0..1] slices the single element
string c = b.idup; // copy it into a new string
如果您使用 wchar,您可以通过这种方式从中获取 wstring。然后std.conv.to可以在string和wstring之间进行转换。
说到 std.conv.to,这是下一个选项,实际上是最简单的选项:
import std.conv;
char a = 'a'; // or wchar
string b = to!string(a); // or to!wstring
在现实世界中,我可能会建议您使用它以获得最大的便利性和简单性,但在某些情况下您会损失一点效率。
因此,我将提出的第三个选项是 std.utf.encode
。
import std.utf;
char[4] buffer;
auto len = encode(buffer, a); // put the char in the buffer
writeln(buffer[0 .. len]); // slice the buffer. idup it if you want string specifically
这适用于任何输入:char、wchar 或 dchar,并且还将 multi-byte 代码点编码到字符串中。要获得 wstring,请使用 wchar[2]
作为缓冲区。这是正确性和效率的良好平衡,只是以不太方便为代价。
由于字符串只是 immutable(char)[]
,您可以像构造任何其他带有字符的数组一样构造它们:
char a = 'a';
string s = [a];
如何将 d 中的单个 char/wchar 转换为单个字符 string/wstring?我在网上找不到任何不谈论 char* 或 wchar* 的内容。
有几种不同的选择。一种是通过获取指针的地址来获取指针。你通常不应该使用它,但你应该知道它是可能的。
char a = 'a';
char[] b = (&a)[0 .. 1]; // &a gets a pointer, [0..1] slices the single element
string c = b.idup; // copy it into a new string
如果您使用 wchar,您可以通过这种方式从中获取 wstring。然后std.conv.to可以在string和wstring之间进行转换。
说到 std.conv.to,这是下一个选项,实际上是最简单的选项:
import std.conv;
char a = 'a'; // or wchar
string b = to!string(a); // or to!wstring
在现实世界中,我可能会建议您使用它以获得最大的便利性和简单性,但在某些情况下您会损失一点效率。
因此,我将提出的第三个选项是 std.utf.encode
。
import std.utf;
char[4] buffer;
auto len = encode(buffer, a); // put the char in the buffer
writeln(buffer[0 .. len]); // slice the buffer. idup it if you want string specifically
这适用于任何输入:char、wchar 或 dchar,并且还将 multi-byte 代码点编码到字符串中。要获得 wstring,请使用 wchar[2]
作为缓冲区。这是正确性和效率的良好平衡,只是以不太方便为代价。
由于字符串只是 immutable(char)[]
,您可以像构造任何其他带有字符的数组一样构造它们:
char a = 'a';
string s = [a];