2010-03-24 15 views
11

Esto es tan simple que me da vergüenza preguntar, pero ¿cómo se convierte una cuerda c en una cadena d en D2?cómo convertir una cadena c en una cadena d?

Tengo dos casos de uso.

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

Respuesta

16
  1. Uso std.string.toString (char *) (D1/Fobos) o std.conv.to (cadena) (D2):

    // D1 
    import std.string; 
    ... 
    string s = toString(c_str); 
    
    // D2 
    import std.conv; 
    ... 
    string s = to!(string)(c_str); 
    
  2. Slice el puntero :

    string s = c_str[0..len]; 
    

    (no puede usar "longitud" porque tiene un significado especial con la sintaxis de división).

Ambos devolverán una porción sobre la cadena C (por lo tanto, una referencia y no una copia). Use la propiedad .dup para crear una copia.

Tenga en cuenta que las cadenas D se consideran codificadas en UTF-8. Si su cadena está en otra codificación, deberá convertirla (por ejemplo, utilizando las funciones de std.windows.charset).

+0

'toString' está en desuso en D2. – kennytm

+0

¿no puedes hacer 'string s = new string (c_str);' o mi conocimiento de C++ se desvaneció drásticamente? –

+0

Pregunta dijo D, no C++. –

Cuestiones relacionadas