如果我们查看您的代码:
set result [string range "0002150C0E67" 8 11 ]
此时,result
设置为字符串0E67
。这是一个看起来像浮点数的字符串,其计算结果为 0×10 67,即为零。
现在,简化您的条件(额外expr
没有添加任何内容)并重新格式化以遵循传统样式(以功能等效的方式),我们得到:
if {$result != "FFFF" && $result != "0000"} {
set result "OK byte 5&6 = 0x$result"
} else {
set result "Fail Byte 5&6 = 0x$result"
}
正如我们所看到的,第二个不等于比较不满足,因此选择了“失败”路径。更好的是像这样解析字符串:
scan "0002150C0E67" "%8x%4x" -> result
然后我们对结果进行数值比较并format
产生输出:
if {$result != 0xFFFF && $result != 0} {
set result [format "OK byte 5&6 = 0x%04x" $result]
} else {
set result [format "Fail Byte 5&6 = 0x%04x" $result]
}