Reputation: 4830
The Tcl expr
function supports arguments written in hex notation: operands which begin with 0x
are treated as integers written in hex form.
However the return value of expr
is always in decimal form: expr 0xA + 0xA
returns 20
, not 0x14
.
Is there a way to tell expr
to return the hex representation?
Is there a Tcl function which converts decimal representation to hex?
Upvotes: 9
Views: 26193
Reputation: 55473
I'd like to elaborate on the glenn's post to make things more clear for Vahagn.
expr
does not return its result in one representation or another, instead, it returns a value in some suitable internal format (an integer, a big integer, a floating point value etc). What you see doing your testing is just Tcl interpreter converting what expr
returned to an appropriate textual form using a default conversion to a string which, for integers, naturally uses base 10.
This conversion takes place in your case solely because you wanted to display the value returned by expr
, and displaying of (any) values naturally tends to convert them to strings if they are "printed"—to a terminal, to a tkcon's window etc.
By using format
you enforce whatever string representation you want instead of the default one. Since format
already returns a value which is a string internally, no conversion takes place when it's printed.
Upvotes: 6
Reputation: 246837
the format
command is what you're after:
format 0x%x [expr {0xa + 0xa}] ;# ==> 0x14
Upvotes: 12