在PowerShell中将Hex转换为ASCII

时间:2017-01-20 11:36:35

标签: powershell hex ascii string-formatting

我有一系列十六进制值,如下所示:

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

我尝试了很多东西,但我从来没有参加最终的代码。我尝试以各种可想象的方式使用convert-function而没有任何成功。

目前我使用this website进行转换,但我需要在PowerShell脚本中执行此操作。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

好吧,我们可以做一些可怕的事情并将HEX视为一个字符串......然后将其转换为int16,然后可以将其转换为char。

$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