我对这个字符串比较脚本有问题:
set result [string range "0002150C0E67" 8 11 ];
if {[expr {$result != "FFFF" && $result != "0000"}]} {set result "OK byte 5&6 = 0x$result" } {set result "Fail Byte 5&6 = 0x$result" };
如果我将"0002150C0E67"更改为"0002150C0D67"或"0002150C0F67"(或许多其他组合(,我会得到一个OK结果。
怎么了?
如果我们看一下你的代码:
set result [string range "0002150C0E67" 8 11 ]
此时,result
设置为字符串0E67
。这是一个看起来像浮点数的字符串,计算结果为 0×1067,仅为零。
现在,简化您的条件(额外的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]
}