convert char[4] to uint at compile time

Moritz Warning moritzwarning at web.de
Tue Dec 23 10:35:09 PST 2008


On Tue, 23 Dec 2008 00:07:08 -0800, Janderson wrote:

> Moritz Warning wrote:
>> On Tue, 16 Dec 2008 19:54:11 +0000, BCS wrote:
>> 
>>> Reply to Moritz,
>>>
>>>> Hi,
>>>>
>>>> I have problems to convert a char[4] to an uint at compile time. All
>>>> variations (I've tried) of using an enum crashes dmd:
>>>>
>>>> union pp { char[4] str; uint num; }
>>>> const uint x = pp("abcd").num
>>>> This does also doesn't work:
>>>>
>>>> const uint x = cast(uint) x"aa aa aa aa";
>>>>
>>>> Any ideas?
>>>>
>>>>
>>> template Go (char[4] arg)
>>> {
>>>     const uint Go = (arg[0] << 24) | (arg[1] << 16) | (arg[2] << 8) |
>>>     arg[3];
>>> }
>>>
>>> import std.stdio;
>>> void main()
>>> {
>>>    writef("%x\n", Go!("Good"));
>>> }
>> 
>> Thanks!
>> That workaround should do it.
>> 
>> Maybe it will be possible to just do cast(uint) "abcd" in the future.
>> :>
> 
> That would only cast the pointer.  It should be something like :
> cast(uint)(*"abcs") or *cast(uint*) "abcs".
> 
> -Joel

I like to see "abcd" being a value type like a decimal or hex value.
A cast(uint) would be possible and nice in that case.


More information about the Digitalmars-d-learn mailing list