2017-01-20 3 views
0

У меня есть ряд шестнадцатеричных значений который выглядит следующим образом:Convert Hex в ASCII в PowerShell

68 65 6c 6c 6f 57 6f 72 6c 64 7c 31 2f 30 38 31 35 7c 41 42 43 2d 31 35 02 08 

Теперь мне нужно, чтобы преобразовать это шестнадцатеричное значение в ASCII, так что результат выглядит следующим образом:

helloWorld|1/0815|ABC-15 

Я пробовал так много всего, но я никогда не доходил до окончательного кода. Я пытался использовать функцию конвертации любым возможным способом без каких-либо успехов.

На данный момент я использую this website для преобразования, но мне нужно сделать это в моем сценарии PowerShell.

ответ

1

Ну, мы можем сделать что-то ужасное и рассматривать HEX как строку ... И затем преобразовать его в int16, который затем можно преобразовать в символ.

$hexString = "68 65 6c 6c 6f 57 6f 72 6c 64 7c 31 2f 30 38 31 35 7c 41 42 43 2d 31 35 02 08" 

У нас есть строка, теперь мы можем использовать пробелы для разделения и получать каждое значение отдельно. Эти значения могут быть преобразованы в int16, который является кодовое представление ASCII для символа

$hexString.Split(" ") | forEach {[char]([convert]::toint16($_,16))} 

Единственная проблема заключается в том, что она возвращает массив отдельных символов. Что мы можем перебирать и сцепить в строку

$hexString.Split(" ") | forEach {[char]([convert]::toint16($_,16))} | forEach {$result = $result + $_} 
$result 
4

Многое, как Phil P.'s approach, но используя операторы -split и -join вместо (также, целые числа, не требуется, ASCII символы будут вписываться в [byte]):

$hexString = "68 65 6c 6c 6f 57 6f 72 6c 64 7c 31 2f 30 38 31 35 7c 41 42 43 2d 31 35 02 08" 
$asciiChars = $hexString -split ' ' |ForEach-Object {[char][byte]"0x$_"} 
$asciiString = $asciiChars -join '' 
$asciiString 
Смежные вопросы