Scalaでhexdump
30分プログラム、その700。Scalaでhexdumpを作ってみました。
hexdumpは、与えられたファイルを16進数で表示するプログラムです。
$ hexdump a.txt 0000000 61 0a 62 0a 0a 0a 0a 0000007
いわゆるバイナリエディタでみれるやつです。
何かと便利ですよ、これ。swfを直接読んだりするときとかに。
使い方
$ scala HexDump a.txt 61 0a 62 0a 0a 0a 0a
ソースコード
あー、Scalaのシンタックスハイライトができるようになったらしいよ。
import java.io._ class BinaryFile(io : InputStream) { def map[A](f: Seq[Byte] => A): List[A] = { var xs = List[A]() for(x <- this){ xs = f(x) :: xs } xs reverse } def foreach(f: Seq[Byte] => Unit) { val buffers = new Array[Byte](16) try{ while(true){ val n = io read buffers if(n == -1){ return () }else{ f(buffers.subArray(0,n)) } } }catch{ case _ : IOException => () } } } object HexDump { def hexDump(path : String) { val bin = new BinaryFile(new FileInputStream(path)) for(xs <- bin){ xs.foreach(printf("%02x ",_)) println("") } } def main(args:Array[String]) { for(arg <- args) { hexDump(arg) } } }