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

问题描述:

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

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

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

format命令是你追求的:

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

看来这个二进制格式不起作用:'格式%b 0xa'失败,或者返回'1010'。 – Vahagn 2012-02-01 19:14:25

+2

Tcl's'format'没有“%b”(请参阅​​我的答案中的文档链接)。你可以找到Tcl代码返回一串二进制数字[here](http://rosettacode.org/wiki/Binary_digits#Tcl)。 Tcl 8.6(仍在测试版)有一个“%b”格式化程序。 – 2012-02-01 19:47:03

我想阐述一下格伦的帖子,使事情瓦哈格恩更加清晰。

expr不返回一个表示或其他结果,而是返回一个合适的内部格式(一个整数,一个大整数,一个浮点值等)的值。你看到什么做你的测试仅仅是Tcl解释转换使用默认转换为一个字符串,为整数,自然使用基地10

这种转换发生在你的情况完全什么expr恢复到一个合适的文本形式因为你想显示由expr返回的值,且(任何)值自然趋向于将它们转换为字符串显示如果它们是“印刷” —到终端,在tkcon的窗口等

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

+0

+1很好的解释 – 2012-02-01 19:52:46