带十六进制数字的Tcl表达式?
问题描述:
Tcl expr
函数支持以十六进制表示法写入的参数:以0x
开头的操作数被视为以十六进制形式写入的整数。带十六进制数字的Tcl表达式?
但是,返回值expr
始终为十进制形式:expr 0xA + 0xA
返回20
,而不是0x14
。
有没有办法告诉expr
返回十六进制表示? 是否有一个将十进制表示转换为十六进制的Tcl函数?
答
我想阐述一下格伦的帖子,使事情瓦哈格恩更加清晰。
expr
不返回一个表示或其他结果,而是返回一个合适的内部格式(一个整数,一个大整数,一个浮点值等)的值。你看到什么做你的测试仅仅是Tcl解释转换使用默认转换为一个字符串,为整数,自然使用基地10
这种转换发生在你的情况完全什么expr
恢复到一个合适的文本形式因为你想显示由expr
返回的值,且(任何)值自然趋向于将它们转换为字符串显示如果它们是“印刷” —到终端,在tkcon的窗口等
通过使用format
你执行任何你想要的字符串表示,而不是默认的。由于format
已在内部返回一个字符串值,因此打印时不会发生转换。
+0
+1很好的解释 – 2012-02-01 19:52:46
看来这个二进制格式不起作用:'格式%b 0xa'失败,或者返回'1010'。 – Vahagn 2012-02-01 19:14:25
Tcl's'format'没有“%b”(请参阅我的答案中的文档链接)。你可以找到Tcl代码返回一串二进制数字[here](http://rosettacode.org/wiki/Binary_digits#Tcl)。 Tcl 8.6(仍在测试版)有一个“%b”格式化程序。 – 2012-02-01 19:47:03