Как построить строку из массива байтов в D

У меня есть массив байтов, который определяется как указатель + размер:

  size_t size;   // size in bytes
  void   *data;  // NOT zero-terminated string

Как мне создать из него «строку», желательно с нулевой копией?


person Brazhnyk Yuriy    schedule 17.02.2015    source источник


Ответы (1)


Это предполагает, что data указывает на неизменяемую память:

string s = (cast(immutable(char)*)data)[0..size];

Если это не так, вместо строки будет более подходящим char[], или вы можете сделать неизменяемую копию с помощью .idup.

person Vladimir Panteleev    schedule 17.02.2015
comment
Противоположным будет: size=s.length; data=cast(void*)s.ptr; ? - person Brazhnyk Yuriy; 17.02.2015
comment
Ага! Если data на самом деле const(void)* (как и должно быть, поскольку содержимое строки неизменяемо), то приведение будет ненужным. - person Vladimir Panteleev; 17.02.2015