【问题标题】:TCL: How to convert a hex value to signed integer?TCL:如何将十六进制值转换为有符号整数?
【发布时间】:2020-03-17 08:56:54
【问题描述】:

此命令假定十六进制表示无符号值:

set q 0xffffb764
set r [expr $q]
puts $r

有没有简单的方法让它把 q 当作一个有符号值而不是无符号值?

【问题讨论】:

  • 这是您连续第三个问题,是同一主题的变体。也许您可以尝试根据前面问题的答案自己找到解决方案?
  • 你想在 $r 中看到什么值?

标签: hex tcl decimal data-conversion


【解决方案1】:

另一种使用格式的解决方案

set q 0xffffb764
set r [format "%d" $q]
puts $r

【讨论】:

    【解决方案2】:

    这是我的解决方案:

      proc hex_to_signed {value} {
        set sign [expr {($value & 0b10000000000000000000000000000000)}]
        set mag  [expr {($value & 0b01111111111111111111111111111111)}]
        if {$sign==0} {
          set exp 0
        } else {
          set exp [expr -2**31]
        }       
        set value [expr {$exp + $mag}]
        return $value
      }
    

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 2023-03-30
      • 2017-09-04
      • 2011-04-11
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多