TCL在从EDK 1.05移植到EDK2后出现八进制数问题

TCL在从EDK 1.05移植到EDK2后出现八进制数问题,tcl,octal,uefi,Tcl,Octal,Uefi,我有一个EFIShell工具,它使用EDK1.05和TCL8.3源代码。此工具接受用户命令以显示PCI-E适配器信息并升级其固件。我最近将其移植到UDK2017。我正在使用VS2012x86工具链来构建该工具 当我从efishell运行二进制文件时,TCL会报告如下错误 can't use invalid octal number as operand of "||" syntax error in expression "(1<<0)" syntax error in expres

我有一个EFIShell工具,它使用EDK1.05和TCL8.3源代码。此工具接受用户命令以显示PCI-E适配器信息并升级其固件。我最近将其移植到UDK2017。我正在使用VS2012x86工具链来构建该工具

当我从efishell运行二进制文件时,TCL会报告如下错误

can't use invalid octal number as operand of "||"
syntax error in expression "(1<<0)"
syntax error in expression "(0x1<<0)"
不能将无效的八进制数用作“||”的操作数
表达式中的语法错误“(1 CTAL问题
这很难确定,但我怀疑在八进制数的问题上,你得到的代码将像
080808
这样的东西解析为一个数字,它被解释为八进制,因为前导的
0
(就像C或C++中的一个常量),所以不能包含
8
(或
9
)。要将数字明确解析为十进制,请使用
scan
命令:

set val 080808
scan $val "%d" parsedVal
# Properly, should check that [scan] has a result of 1, but I probably wouldn't bother
puts "$val -> $parsedVal"
奇数表达式语法错误 表达式中的另一个
语法错误”(1Octal问题
这很难确定,但我怀疑在八进制数的问题上,你得到的代码将像
080808
这样的东西解析为一个数字,它被解释为八进制,因为前导的
0
(就像C或C++中的一个常量),所以不能包含
8
(或
9
)。要将数字明确解析为十进制,请使用
scan
命令:

set val 080808
scan $val "%d" parsedVal
# Properly, should check that [scan] has a result of 1, but I probably wouldn't bother
puts "$val -> $parsedVal"
奇数表达式语法错误
表达式中的另一个
语法错误“(1Wow…8.3相当长的一段时间不受支持(远远超过十年!)。它的后续版本8.4也不受支持,而8.5目前只是长期支持。当然,这不是你的错,但有一个明确的限制…Wow…8.3相当长的一段时间不受支持(远远超过十年!)。其后续版本8.4也不受支持,而8.5目前仅处于长期支持状态。当然,这不是你的错,但有一个明确的限制…谢谢你,多纳尔!我有很多地方可以看到语法错误。因此使用扫描有点困难。堆栈跟踪肯定很有用。谢谢你,多纳尔!我有很多地方可以看到语法错误可以看到错误。所以使用扫描有点困难。堆栈跟踪绝对有用。
% set val (1<<0)
(1<<0)
% expr {$val + 1}
can't use non-numeric string as operand of "+"
% puts $errorInfo
can't use non-numeric string as operand of "+"
    while executing
"expr {$val + 1}"