我的代码如下所示:
proc decimalToBin { decNum numBits } {
set one "1"
set zero "0"
set rd ""
for { set jj 0 } { $jj < $numBits } { incr jj } {
if { [expr {$decNum % 2}] > 0 } {
set rd "$one$rd"
} else {
set rd "$zero$rd"
}
set decNum [expr $decNum / 2]
}
return $rd
}
set List_Of_Values_To_Sweep {0 1 63 255}
foreach i {$List_Of_Values_To_Sweep} {
set temp [decimalToBin $i 8]
}
我收到的错误如下:
ncsim: *E,TCLERR: can't read "List_Of_Values_To_Sweep": no such
variable.
while executing "expr $decNum % 2"
如何转换列表中的值以使其与%
操作数很好地匹配?
答案 0 :(得分:4)
删除$List_Of_Values_To_Sweep
周围的大括号。它们阻止变量替换,因此字符串“$ List_Of_Values_To_Sweep”(带有文字美元符号)被分配给i
并在循环中使用,这意味着decnum
的{{1}}参数将也是这个字符串而不是你想要的数值。条件内的双重评估意味着代码尝试对字符串执行变量替换,但由于decimalToBin
内没有名为List_Of_Values_To_Sweep
的变量,它会因您引用的错误消息而失败。
此外,decimalToBin
条件的评估方式与传递给if
一样,因此您无需在其中调用expr
:
expr
然后,你甚至不需要它。您可以使用
替换整个if { $decNum % 2 > 0 } {
构造
if
因为set rd [expr {$decNum % 2}]$rd
调用将为您提供所需的一个或零。