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

时间:2018-11-19 22:45:35

标签: hex powershell-v3.0

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

$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。

是否有人要内联添加它们,而不是如本文中所示创建三个单独的char值: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 个答案:

答案 0 :(得分:1)

使用子表达式:

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

只要您转换值,字符串串联或使用格式运算符也将起作用:

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

如果要使用-as运算符而不是将数字强制转换为char,则需要对表达式进行分组:

$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])