带有十六进制数的Tcl表达式?

时间:2012-02-01 17:06:00

标签: hex expression tcl

Tcl expr函数支持以十六进制表示法编写的参数:以0x开头的操作数被视为以十六进制形式编写的整数。

expr的返回值始终为十进制格式:expr 0xA + 0xA返回20,而不是0x14

有没有办法告诉expr返回十六进制表示? 是否有一个Tcl函数将十进制表示转换为十六进制?

2 个答案:

答案 0 :(得分:8)

format命令就是你所追求的:

format 0x%x [expr {0xa + 0xa}]  ;# ==> 0x14

答案 1 :(得分:5)

我想详细说明格伦的帖子,以便让Vahagn更清楚。

expr不会在一个或另一个表示中返回其结果,而是以某种合适的内部格式(整数,大整数,浮点值等)返回一个值。你看到你做的测试就是Tcl解释器将expr返回到适当的文本形式,使用默认转换为字符串,对于整数,自然地使用基数10。

此转换仅在您的情况下发生,因为您希望显示expr返回的值,并且显示(任意)值自然会将它们转换为字符串(如果它们被“打印”)到终端,到tkcon的窗口等。

通过使用format,您可以强制执行所需的任何字符串表示,而不是默认的字符串表示。由于format已经在内部返回一个字符串值,因此在打印时不会发生转换。