TCL:如何将十六进制值转换为有符号整数?

TCL: How to convert a hex value to signed integer?

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

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

有没有简单的方法让它将 q 视为表示有符号值而不是无符号值?

这是我的解决方案:

  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
  }

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

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