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