View mode: basic / threaded / horizontal-split · Log in · Help
April 13, 2005
Hexadecimal litterals not compatible with numeric types
Okay, I'm new here so please take it easy on me if this sounds like a stupid question.

Why does the compilation of...

int testint = x"ff ff";
assert(testint==65535);

(inside of an otherwise working program) cause an error like...

F:\DMD\PRACTICE\GNPFU0C.D(262): cannot implicitly convert expression ("\u00ff\u00ff") of type char[2] to int

? I even tried casting it as...

int testint = cast(int)x"ff ff";
assert(testint==65535);

but then I got...

F:\DMD\PRACTICE\GNPFU0C.D(262): e2ir: cannot cast from char[2] to int

. Shouldn't a 4 digit hexadecimal litteral be compatible with the int variable type?

I would think an implicit cast should be expected, since a hexadecimal litteral represents a numeric value.

TZ
April 13, 2005
Re: Hexadecimal litterals not compatible with numeric types
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

TechnoZeus schrieb am Wed, 13 Apr 2005 02:12:18 -0500:
> Okay, I'm new here so please take it easy on me if this sounds like a stupid question.
>
> Why does the compilation of...
>
> int testint = x"ff ff";
> assert(testint==65535);

int testint = 0xffff; // or 0xFFFFF or 0xFF_FF or 0xff_ff
assert(testint==65535);

Thomas


-----BEGIN PGP SIGNATURE-----

iD8DBQFCXM9c3w+/yD4P9tIRAh8WAJwKfYuVkMKXkt6wJVFU+qkK4WrJUQCeNs/O
CuXiiEHbaYNCML90ZMZLxuk=
=d0MG
-----END PGP SIGNATURE-----
April 13, 2005
Re: Hexadecimal litterals not compatible with numeric types
Right, but I'm taling about X strings, as described in http://digitalmars.com/d/sdwest/paper.html as follows...

<quote>

X strings
Hex dumps often come in the form of:
 00 0A E3 DC 86 73 7E 7E

Putting them into a form acceptable to C:
 0x00, 0x0A, 0xE3, 0xDC, 0x86, 0x73, 0x7E, 0x7E,

or:
 "\x00\x0A\xE3\xDC\x86\x73\x7E\x7E"

This can get tedious and error prone when there's a lot of it. D has the x string, where hex data can be simply wrapped with double quotes, leaving the whitespace intact:
 x"00 0A E3 DC 86 73 7E 7E"

</quote>

It seemed like a good idea, but I'm wondering why it doesn't work as I had expected it to.

TechnoZeus

"Thomas Kuehne" <thomas-dloop@kuehne.thisisspam.cn> wrote in message news:tjvui2-60e.ln1@lnews.kuehne.cn...
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> TechnoZeus schrieb am Wed, 13 Apr 2005 02:12:18 -0500:
> > Okay, I'm new here so please take it easy on me if this sounds like a stupid question.
> >
> > Why does the compilation of...
> >
> > int testint = x"ff ff";
> > assert(testint==65535);
>
> int testint = 0xffff; // or 0xFFFFF or 0xFF_FF or 0xff_ff
> assert(testint==65535);
>
> Thomas
>
>
> -----BEGIN PGP SIGNATURE-----
>
> iD8DBQFCXM9c3w+/yD4P9tIRAh8WAJwKfYuVkMKXkt6wJVFU+qkK4WrJUQCeNs/O
> CuXiiEHbaYNCML90ZMZLxuk=
> =d0MG
> -----END PGP SIGNATURE-----
April 13, 2005
Re: Hexadecimal litterals not compatible with numeric types
TechnoZeus wrote:

> Right, but I'm taling about X strings, as described in
> http://digitalmars.com/d/sdwest/paper.html as follows...
> 
> It seemed like a good idea, but I'm wondering why it doesn't work as I had expected it to.

Seems like you got your strings and integers mixed up ?

import std.stdio;
void main()
{
  writef(x"68 65 6c 6c 6f 0a");
}

--anders
April 13, 2005
Re: Hexadecimal litterals not compatible with numeric types
Ah, okay.  Nope... I didn't get them mixed up.  I just misinterpreted the intended usage.  Thanks for the clarification, and the example.  :)

TZ

"Anders F Björklund" <afb@algonet.se> wrote in message news:d3inem$18ld$1@digitaldaemon.com...
> TechnoZeus wrote:
>
> > Right, but I'm taling about X strings, as described in
> > http://digitalmars.com/d/sdwest/paper.html as follows...
> >
> > It seemed like a good idea, but I'm wondering why it doesn't work as I had expected it to.
>
> Seems like you got your strings and integers mixed up ?
>
> import std.stdio;
> void main()
> {
>    writef(x"68 65 6c 6c 6f 0a");
> }
>
> --anders
Top | Discussion index | About this forum | D home