if 语句中的字符串比较问题



我对这个字符串比较脚本有问题:

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]
}

相关内容

  • 没有找到相关文章

最新更新