Re: Implied cast differs from explicit cast [message #176674 is a reply to message #176671] |
Mon, 16 January 2012 18:51 |
M. Strobel
Messages: 386 Registered: December 2011
Karma:
|
Senior Member |
|
|
Am 16.01.2012 14:25, schrieb Jerry Stuckle:
> 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.
>>
--cut
>>
>
> 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().
The last two sentences sound correct to me, so far. Looks like you are trying to
think like PHP.
But this does not make things better here, because PHP (the Zend T_INT_CAST) is just
half-witted here.
/Str.
|
|
|