Re: Implied cast differs from explicit cast [message #176671 is a reply to message #176662] |
Mon, 16 January 2012 13:25 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma:
|
Senior Member |
|
|
On 1/16/2012 2:42 AM, Arno Welzel wrote:
> Jerry Stuckle, 2012-01-16 04:39:
>
>> On 1/15/2012 10:08 PM, lb wrote:
>>> jstucklex(at)attglobal(dot)net wrote:
>>>> ...
>>>> No, it is not. '0x12' is a hex number, not an integer. (int)'0x12'
>>>> converts this correctly to 0.
>>>
>>> OK, but if (int)'0x12' is 0, why is '0x12'+0 == 18?
>>>
>>> Why are they different? Aren't they both doing 'string conversion to
>>> number'?
>>
>> As I said - '0x12' is a hex value, not an integer. You are trying to
>> convert it as if it were a string representation of an integer. The
>> implicit conversion recognizes it is a hex value and uses the
>> appropriate conversion.
>
> There is no difference between "hex value" and "integer" - both 0x12 and
> 18 are just different representations of the same value. The problem is
> that the explizit cast from string to int does not take this into account.
>
> Example:
>
> <?php
> $a = 0x12;
> $b = 18;
> print $a-$b;
> ?>
>
> Result:
>
> 0
>
In C/C++ there is no difference. However, in PHP there is. The 'x' is
not a valid decimal character, so (int) '0x12' returns 0.
The correct function to use when converting hexadecimal strings is hexdec().
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|