On 21.02.2013 21:01, Ewald wrote:
Hello,

Try running the following program and be amazed of the output:

    Program Test;

    Uses Sysutils;

    Begin
         WriteLn(StrToInt('x1'));
         WriteLn(StrToInt('x0'));
         WriteLn(StrToInt('xabcdef'));
    End.


Apparently the StrToInt function interprets strings starting with an `x`
as hexadecimal numbers? This behaviour seems rather strange to me
(strings starting with 0x would be a bit more understandable, but then
again, we're programming pascal here, not C) and it is not mentioned in
the documentation. What do I do with it?

IntToStr simply calls through to Val and there is documented (more or less) that it supports binary (%), octal (&) and hexadecimal ($, 0x) values as well (see here: http://www.freepascal.org/docs-html/rtl/system/val.html ). That it also supports 'x' and 'X' as a prefix for hexadecimal values is because of Delphi compatibility.

As a sidenote: the prefixes %, & and $ can be used in normal source code as well.

A- File a bug concerning incomplete documentation?
B- File a bug concerning incorrect behaviour of StrToInt()?
C- Do nothing and live with it.
D- ....?

I'd say A. On the one hand a reference from StrToInt(64), StrToInt(64)Def and TryStrToInt(64) to Val should be added and on the other hand Val's documentation should be extended by the fact that '0x', 'X' and 'x' are valid prefixes for hexadecimal values as well. And while we're at it references from the 32bit StrToInt variants to the 64bit variants could be added as well (they do exist the other way round as one can see here: http://www.freepascal.org/docs-html/rtl/sysutils/strtoint64.html ).

So if you would please be so kind to open a bug report :)

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to