Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
June 24, 2014 Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Hi, I like to print the strings from a C function that returns const(dchar*), but I can't make the conversion to dstring. I can convert vice versa by: dstring text = "Hello"; const(dchar)* str = toUTFz!(const(dchar)*)(text); // passing it to C function prints Hello However, I don't have the idea how can I go the other way. I tried several methods such as using to!dstring, toUTF32 etc which compiles successfully however printing them gives address of them instead of text. Thanks, Danyal Zia |
June 24, 2014 Re: Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Posted in reply to Danyal Zia | On Tue, 24 Jun 2014 13:37:41 -0400, Danyal Zia <catofdanyal@yahoo.com> wrote:
> Hi, I like to print the strings from a C function that returns const(dchar*), but I can't make the conversion to dstring. I can convert vice versa by:
>
> dstring text = "Hello";
> const(dchar)* str = toUTFz!(const(dchar)*)(text);
> // passing it to C function prints Hello
>
> However, I don't have the idea how can I go the other way. I tried several methods such as using to!dstring, toUTF32 etc which compiles successfully however printing them gives address of them instead of text.
const(dchar *)x = ...;
// assuming 0 terminated
dstring text = x[0..x.strlen].idup;
-Steve
|
June 24, 2014 Re: Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Tuesday, 24 June 2014 at 17:59:41 UTC, Steven Schveighoffer wrote:
> const(dchar *)x = ...;
>
> // assuming 0 terminated
> dstring text = x[0..x.strlen].idup;
>
> -Steve
const(dchar)* x = "Hello\0";
dstring text = x[0..x.strlen].idup;
writeln(text);
Error: no property 'strlen' for type 'const(dchar)*'
|
June 24, 2014 Re: Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Tuesday, 24 June 2014 at 17:59:41 UTC, Steven Schveighoffer wrote: > // assuming 0 terminated > dstring text = x[0..x.strlen].idup; strlen is only defined for char, not dchar: https://github.com/D-Programming-Language/druntime/blob/master/src/core/stdc/string.d#L44 |
June 24, 2014 Re: Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Posted in reply to Danyal Zia | On Tuesday, 24 June 2014 at 18:17:07 UTC, Danyal Zia wrote:
> On Tuesday, 24 June 2014 at 17:59:41 UTC, Steven Schveighoffer wrote:
>> const(dchar *)x = ...;
>>
>> // assuming 0 terminated
>> dstring text = x[0..x.strlen].idup;
>>
>> -Steve
> const(dchar)* x = "Hello\0";
> dstring text = x[0..x.strlen].idup;
> writeln(text);
>
> Error: no property 'strlen' for type 'const(dchar)*'
You can do what he said, but you'll have to write your own strlen function:
something like:
size_t strlen(in dchar* s) pure @system nothrow
{
size_t pos = 0;
dchar term = '\0';
while(s[pos] != term)
++pos;
return pos;
}
const(dchar)* ds = "hello\0";
dstring text = ds[0..strlen(ds)].idup;
writeln(text);
works
|
June 24, 2014 Re: Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Posted in reply to Danyal Zia | On Tue, 24 Jun 2014 18:17:06 +0000, Danyal Zia wrote: > On Tuesday, 24 June 2014 at 17:59:41 UTC, Steven Schveighoffer wrote: >> const(dchar *)x = ...; >> >> // assuming 0 terminated dstring text = x[0..x.strlen].idup; >> >> -Steve > const(dchar)* x = "Hello\0"; > dstring text = x[0..x.strlen].idup; > writeln(text); > > Error: no property 'strlen' for type 'const(dchar)*' A dchar* strlen implementation: http://dpaste.dzfl.pl/a4053387d8a4 |
June 24, 2014 Re: Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Posted in reply to Chris Cain | On Tuesday, 24 June 2014 at 18:34:31 UTC, Chris Cain wrote:
> You can do what he said, but you'll have to write your own strlen function:
>
> something like:
>
> size_t strlen(in dchar* s) pure @system nothrow
> {
> size_t pos = 0;
> dchar term = '\0';
> while(s[pos] != term)
> ++pos;
> return pos;
> }
> const(dchar)* ds = "hello\0";
> dstring text = ds[0..strlen(ds)].idup;
> writeln(text);
>
> works
It works indeed, thanks a lot! Any chance of making it into std phobos?
|
June 24, 2014 Re: Converting from C const(dchar*) to dstring | ||||
---|---|---|---|---|
| ||||
Posted in reply to Chris Cain | On Tue, 24 Jun 2014 14:28:58 -0400, Chris Cain <zshazz@gmail.com> wrote:
> On Tuesday, 24 June 2014 at 17:59:41 UTC, Steven Schveighoffer wrote:
>> // assuming 0 terminated
>> dstring text = x[0..x.strlen].idup;
>
> strlen is only defined for char, not dchar:
> https://github.com/D-Programming-Language/druntime/blob/master/src/core/stdc/string.d#L44
>
Right, I forgot about that.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation