PowerShell(バイナリファイル読み込み)

(本記事はPowerShell入門記事としてコチラにもまとめています。)

バイナリファイルを読み込みます。

まずは元になるバイナリの生成から。

PS C:\Users\takk\aaa> echo 123 > a.bin
PS C:\Users\takk\aaa> ls a.bin


    ディレクトリ: C:\Users\takk\aaa


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2017/07/04     22:04         12 a.bin


PS C:\Users\takk\aaa>

生成したバイナリをcat(コマンドレットはget-content)で読み込みます。

PS C:\Users\takk\aaa> cat -encoding byte a.bin
255
254
49
0
50
0
51
0
13
0
10
0
PS C:\Users\takk\aaa>

-encodingは、-enにbyteはbyに省略できます。

PS C:\Users\takk\aaa> cat -en by a.bin
255
254
49
0
50
0
51
0
13
0
10
0
PS C:\Users\takk\aaa>

それにしても、123という文字列をリダイレクトしただけなのに、データ数が多い気がします。

16進数で横に並べてみましょう。

PS C:\Users\takk\aaa> cat -en by a.bin | %{$s=""}{$s+="{0:x2} " -f $_}{echo $s}
ff fe 31 00 32 00 33 00 0d 00 0a 00
PS C:\Users\takk\aaa>

PowerShellのecho(Write-Output)は、BOM付きUTFでテキストファイルを作るようです。

コマンドプロンプトのechoを利用しましょう。

PS C:\Users\takk\aaa> cmd /c "echo 123 > b.bin"
PS C:\Users\takk\aaa> cat -en by b.bin | %{$s=""}{$s+="{0:x2} " -f $_}{echo $s}
31 32 33 20 0d 0a
PS C:\Users\takk\aaa>

意図したとおりにバイナリができました。

コメント

タイトルとURLをコピーしました