16進数の文字コード(ASCII)から文字列を取得

16進数の文字コード(ASCII)から文字列を取得するプログラムを作成しました。Encodingクラスのgetcharsメソッドを使用しました。getcharsメソッドは引数で指定した値を文字列に変換します。指定する値は10進数で渡します。そのため、引数で指定した16進数を10進数に変換する処理が必要です。変換方法は次を使います。


$dec = [system.Convert]::ToString("0x53",10)
上記の場合、0x53(16進数)を10進数に変換し$decへ代入しています。今回は1文字コードずつ変換する処理を行うため、文字コードを配列に格納しました。引数に渡される文字コードをスペース区切りとし、Splictメソッドで配列に格納しています。

set-PSDebug -strict
# ----------------------------------------
# 16進数の文字コード(ASCII)から文字列を取得
# 引数:文字コード
# ----------------------------------------
function GetCharStr{
    # 引数の取得
    param( [string]$hex )
    $hex_wk = $hex.split(" ")
    
    # 10進数に変換
    $dec_array = @()
    for ( $n = 0; $n -le $hex_wk.length-1; $n++){
        $dec_array +=  [system.Convert]::ToString("0x" + $hex_wk[$n],10)
    }
    
    # encodingオブジェクト取得
    $encoding_wk = [system.Text.Encoding]::GetEncoding("ASCII")
    
    # 文字列の取得
    $str = ""
    foreach ($dec in $dec_array){
        $str += $encoding_wk.getchars($dec)
    }
    write-Host $str
}

以下結果画面です。