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

Vah*_*agn 5 hex expression tcl

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

但是返回值expr总是以十进制形式:expr 0xA + 0xA返回20,没有0x14.

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

gle*_*man 9

这个format命令就是你所追求的:

format 0x%x [expr {0xa + 0xa}]  ;# ==> 0x14
Run Code Online (Sandbox Code Playgroud)

  • Tcl的`format`没有"%b"(请参阅​​我的答案中的文档链接).你可以找到Tcl代码来返回一串二进制数字[这里](http://rosettacode.org/wiki/Binary_digits#Tcl).Tcl 8.6(仍处于测试阶段)DOES具有"%b"格式化程序. (2认同)

kos*_*tix 5

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

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

这种转换只发生在你的情况下,因为你想要显示返回的值expr,并且显示(任意)值自然倾向于将它们转换为字符串,如果它们被"打印"到终端,到tkcon的窗口等.

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