Добавляйте шестнадцатеричные символы непосредственно в строку в PowerShell - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу сделать что-то подобное (я пробовал четыре разных способа). Создайте строковое значение, содержащее шестнадцатеричные символы:

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

Есть ли кто-то, кто добавил бы их в строку вместо создания трех отдельных значений символов, как показано в этом посте: Написание гекс-экранированного символа в 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 голосов
/ 20 ноября 2018

Использовать подвыражения:

$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 оператор вместо приведения чисел к символам необходимо сгруппировать выражения:

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