代码之家  ›  专栏  ›  技术社区  ›  NealWalters

将十六进制字符直接添加到PowerShell中的字符串

  •  0
  • NealWalters  · 技术社区  · 7 年前

    我想做这样的事情(我尝试了四种不同的方法)。创建包含十六进制字符的字符串值:

    $searchString = "filterValue\xEF\xBF\xBD"
    #$searchString = "filterValue" + 0xEF -as [char] + 0xBF -as [char] + 0xBD -as [char]
    #$searchString = "filterValue" + 0xEF + 0xBF + 0xBD
    $searchString = "filterValue\0xEF\0xBF\0xBD"
    Write-Host "$searchString len=$($searchString.Length)"
    

    长度应为14。

    是否有人在线添加它们,而不是创建三个单独的字符值,如本文所示: Writing a hex escaped char in Powershell

    我尝试了更长的方法:

    $char1 = (0xEF -as [char])
    $char2 = (0xBF -as [char])
    $char3 = (0xBD -as [char])
    $searchString = "filterValue" + $char1 + $char2 + $char3
    Write-Host "$searchString len=$($searchString.Length)"
    $posSearchString = $filterBytes.IndexOf("$searchString")
    

    但这似乎不符合我的要求:

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ansgar Wiechers    7 年前

    使用子表达式:

    $searchString = "filterValue$([char]0xEF)$([char]0xBF)$([char]0xBD)"
    

    只要您强制转换值,字符串连接或使用format运算符就会起作用:

    $searchString = "filterValue" + [char]0xEF + [char]0xBF + [char]0xBD
    $searchString = "filterValue{0}{1}{2}" -f [char]0xEF, [char]0xBF, [char]0xBD
    

    如果你想使用 -as

    $searchString = "filterValue" + (0xEF -as [char]) + (0xBF -as [char]) + (0xBD -as [char])
    $searchString = "filterValue{0}{1}{2}" -f (0xEF -as [char]), (0xBF -as [char]), (0xBD -as [char])