アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
とりあえずRubyっぽいスクリプトに書き換えてみました (スコア:1)
組み込みのクラスにメソッドを追加したりとか、
やりたい放題やってますw
BLOCK_SIZE = 16
class String
def to_hex
'%02x' % self[0]
end # def
def printable?
0x20 < self[0]
end # def
end # class
class NilClass
def to_hex
' '
end # def
def printable?
false
end # def
end # class
data = nil
open(ARGV.shift, "rb") do |f|
data = f.read((ARGV.shift or f.stat.size).to_i)
end
0.step(data.size, BLOCK_SIZE) do |i|
block = data[i, BLOCK_SIZE].split(//)
block.concat([nil] * (BLOCK_SIZE - block.size)) if block.size < BLOCK_SIZE
# アドレス
printf("%08x ", i)
# バイナリ出力
print block.map{|a| a.to_hex}.join(' '), ' '
# テキスト出力
puts block.map{|a| a.printable? ? a : ' '}.join
end
Re:とりあえずRubyっぽいスクリプトに書き換えてみま (スコア:1)
シンプルな構造になって、読み書きしやすそうな感じがいいですね。
挙動ですが、data.sizeがBLOCK_SIZEの倍数になると違ってくるようですw
Re:とりあえずRubyっぽいスクリプトに書き換えてみま (スコア:1)
ま、まあバグがあるとはいえ、こんな風にすっきり書けるので最近はRubyしか使ってなかったりします。
Rubyは配列がとても強力なのでこういったものを作るときは配列をどのように使うかまず考えます。もっともだらしない使い方をするとメモリを浪費するわけですけど、よっぽどのことがない限りあまりその辺は考慮しません。
配列ではないですが、このプログラムの例では最初に指定された大きさまでファイルを全部メモリに読み込んじゃうわけでこれもかなりの浪費です。でもそういったことは頭の隅でちらっと思うだけでそのままにしときます。すっきり書いておけばいざというときに書き直すのも楽ですし。