Tcl expr
函数支持以十六进制表示法编写的参数:以0x
开头的操作数被视为以十六进制形式编写的整数。
但expr
的返回值始终为十进制格式:expr 0xA + 0xA
返回20
,而不是0x14
。
有没有办法告诉expr
返回十六进制表示?
是否有一个Tcl函数将十进制表示转换为十六进制?
答案 0 :(得分:8)
format
命令就是你所追求的:
format 0x%x [expr {0xa + 0xa}] ;# ==> 0x14
答案 1 :(得分:5)
我想详细说明格伦的帖子,以便让Vahagn更清楚。
expr
不会在一个或另一个表示中返回其结果,而是以某种合适的内部格式(整数,大整数,浮点值等)返回一个值。你看到你做的测试就是Tcl解释器将expr
返回到适当的文本形式,使用默认转换为字符串,对于整数,自然地使用基数10。
此转换仅在您的情况下发生,因为您希望显示expr
返回的值,并且显示(任意)值自然会将它们转换为字符串(如果它们被“打印”)到终端,到tkcon的窗口等。
通过使用format
,您可以强制执行所需的任何字符串表示,而不是默认的字符串表示。由于format
已经在内部返回一个字符串值,因此在打印时不会发生转换。