将dlang char / wchar转换为string / wstring

问题描述

如何在d中将单个char / wchar转换为单个字符的字符串/ 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,并且还将多字节代码点编码到字符串中。要获取wstring,请对缓冲区istead使用wchar[2]。这是正确性和效率之间的良好平衡,只是有点不方便。

,

由于字符串只是immutable(char)[],因此您可以像使用chars的任何其他数组一样构造它们:

char a = 'a';
string s = [a];