我没有使用PowerShell的经验,所以我在输入二进制文件时尝试做一些按位操作(纯粹是为了可读性)。我使用以下函数来转换为二进制和从二进制转换它们似乎有用。
function bin($a){
return [convert]::ToString($a,2)
}
function unbin($a){
return [convert]::ToInt64($a,2)
}
然后我试图运行以下内容:
bin(unbin('11001101') -bxor unbin('10110110'))
期望输出1111011
。
令我惊讶的是,我得到了结果11001101
(bin(unbin('11001101'))
的结果)。
为了让我的代码能够工作,我需要将unbin
调用包含在更多括号中,我无法理解原因:
bin((unbin('11001101')) -bxor (unbin('10110110')))
为什么需要这些额外的括号?
答案 0 :(得分:2)
请注意,PowerShell中的函数调用更类似于调用cmdlet,而不是 .NET方法。所以你在那里有很多不必要的括号,并且缺少一些相关的括号。以下代码
bin(unbin('11001101') -bxor unbin('10110110'))
将一个参数传递给bin
(括号的完整内容),但三个传递给第一个unbin
调用。它相当于
unbin '11001101' -bxor "unbin('10110110')"
(如果我没有弄错;细节可能会有所不同(可能是四个),但这就是它的要点)。
调用PowerShell函数时,参数不会在括号中传递。 -bxor
的操作数必须是表达式本身,因此任何管道都必须加括号:
bin ((unbin '11001101') -bxor (unbin '10110110'))