【问题标题】:Tcl expressions with hex numbers?带有十六进制数字的 Tcl 表达式?
【发布时间】:2012-02-01 17:06:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: hex expression tcl


    【解决方案1】:

    format 命令就是您所追求的:

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

    【讨论】:

    • 似乎二进制大小写不起作用:format %b 0xa 失败或返回1010
    • Tcl 的format 没有“%b”(请参阅​​我的回答中的文档链接)。你可以找到 Tcl 代码来返回一串二进制数字here。 Tcl 8.6(仍处于测试阶段)确实有一个“%b”格式化程序。
    【解决方案2】:

    我想详细说明 glenn 的帖子,以便让 Vahagn 更清楚地了解情况。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 1970-01-01
      • 2019-04-25
      • 2012-07-12
      • 2017-02-27
      • 2018-09-08
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多