(本記事は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>
意図したとおりにバイナリができました。


コメント