【问题标题】:Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Char"无法将“System.Object[]”类型的“System.Object[]”值转换为“System.Char”类型
【发布时间】:2017-09-08 09:03:50
【问题描述】:

我刚刚开始使用 powershell,我正在制作一个非常简单的加密功能。我想获取字符串中的每个字符,将其转换为 int 并添加选择的数字,然后将其转换回 char。

这很好用:

function encrypt($a){
  $letter=[int][char]$a
  $letter=$letter+1;
  return [char]$letter
}
encrypt("test)

但这不是:

function encrypt($a, $key){
  $letter=[int][char]$a
  $letter=$letter+$key;
  return [char]$letter
}
encrypt("test", 1)

它给了我标题中的错误..我错过了什么?

【问题讨论】:

  • 该函数应该采用单个字符作为参数,因此它的 encrypt("t") 而不是 encrypt("test")

标签: powershell


【解决方案1】:

您以错误的方式传递参数:

encrypt "t" 1

有效。

Powershell 会将("t", 1) 视为单个参数。

由于您没有将任何参数指定为强制参数,powershell 将仅使用您提供参数的顺序。所以第一个参数give用来填充变量$a。您也可以按任意顺序调用带名称的参数:

encrypt -key 5 -a a
f

powershell 也不能将整个字符串(例如“test”)解析为字符,它总是需要是单个字符。如果您希望您的函数能够获取整个字符串,您可以执行以下操作:

function encrypt($word,$offset){
    foreach ($letter in $word.toCharArray()) {
        $letter=[int]$letter+$offset;
        $return = $return + [char]$letter
    }
    return $return
}

这应该提供您正在寻找的内容:

encrypt "test" 2
vguv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2011-06-22
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多