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
此命令假定十六进制表示无符号值:
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