Home > Windows にまつわる e.t.c.

PowerShell で 16進ダンプ


バイナリ―データとか、通信内容を解析する際には16進ダンプがあると便利ですね。

PowerShell で書いてみました

########################################################
# 16進ダンプ
########################################################
function HexDump([byte[]]$ReceiveBuffer){

    $Max = $ReceiveBuffer.Length

    [array]$ReturnBuffer = @()
    $LineMax = 16
    $InsertSpace = 7

    $j = 0
    $Line = ""
    $Char = ""
    for($i = 0; $i -lt $Max; $i++){
        # 16 バイトで Line 出力
        if( $j -ge $LineMax ){
            $ReturnBuffer += $Line + " "+ $Char
            $Line = ""
            $Char = ""
            $j = 0
        }

        $Line += $ReceiveBuffer[$i].ToString("x2") + " "

        # 8バイトごとに1つ開ける
        if( $j -eq $InsertSpace ){
            $Line += " "
        }

        if( [char]::IsControl($ReceiveBuffer[$i]) -or $ReceiveBuffer[$i] -ge 0xa0){
            $Char += "・"
        }
        else{
            $Char += [char]$ReceiveBuffer[$i]
        }

        $j++
    }

    # 残り出力
    $Line += "   " * ($LineMax - $j)
    if( $j -le $InsertSpace ){
        $Line += " "
    }
    $ReturnBuffer += $Line + " " + $Char

    Return $ReturnBuffer
}

 

バイナリ(byte[])を渡すと、16進ダンプの string array を返します。

こんな感じで

[HexDump.ps1]

# テストデータ
[byte[]]$Data = @(  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
                    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
                    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f )

# 16進ダンプ
[array]$StringArray = HexDump $Data

# ダンプ表示
foreach( $Line in $StringArray ){
    echo $Line
}

 

 

これを書いた後に Format-Hex コマンドレットがあるのに気が付いたのはナイショです w

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.