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