Home > Windows にまつわる e.t.c.
バイナリ―データとか、通信内容を解析する際には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
Copyright © MURA All rights reserved.