【问题标题】:how to convert a c string to a d string?如何将c字符串转换为d字符串?
【发布时间】:2010-03-24 13:51:46
【问题描述】:

这么简单我都不好意思问了,但是在D2中怎么把c字符串转成d字符串呢?

我有两个用例。

string convert( const(char)* c_str );
string convert( const(char)* c_str, size_t length );

【问题讨论】:

    标签: d


    【解决方案1】:
    1. 使用 std.string.toString(char*) (D1/Phobos) 或 std.conv.to!(string) (D2):

      // D1
      import std.string; 
      ... 
      string s = toString(c_str);
      
      // D2
      import std.conv;
      ...
      string s = to!(string)(c_str);
      
    2. 切片指针:

      string s = c_str[0..len];
      

      (不能使用“length”,因为它在切片语法中具有特殊含义)。

    两者都将返回 C 字符串上的切片(因此,是引用而不是副本)。使用 .dup 属性创建副本。

    请注意,D 字符串被认为是 UTF-8 编码。如果您的字符串采用另一种编码,则需要对其进行转换(例如,使用 std.windows.charset 中的函数)。

    【讨论】:

    • toString 在 D2 中已弃用。
    • @Caspin:使用std.conv 模块中的to!stringtext
    • IIRC 字符串是不可变的,因此对于情况 2,您需要进行强制转换(如果您知道 c 字符串是不可变的,或者在其他情况下使用 .idup
    • @The Elite:是的,确实如此,如果你喜欢 C++,你应该看看 D。(请注意,目前生态系统有点不成熟)。
    • @Cyber​​Shadow,与 c++ 相比,D1 没有提供足够的优势来引起我的兴趣。尤其是 D2 的模板语法引起了我的兴趣,基于范围的容器而不是基于迭代器的容器,以及 ...
    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多