いつも言ってることだけど、 ruby 1.9 からの m17n のせいで、バイナリツールとしての ruby が色々不便になって、参っていました。特に、 'a' の ASCII code を知るのに、
irb(main):001:0> 'a'[0] => "a"
とかやるクセがついてて、これで "a" と出るとか、そういう比較的どうでもいいところで参ってました。
しかしまぁどの環境も ruby 1.9 以降になってるわけで、なんとかしないとなーということで、 IRB の inspector いじって色々やってみて、結果として 1.8 時代より便利になって、最近は割と普通に使えている。
https://github.com/shinh/test/blob/master/.irbrc
何をしてるかというと、評価した結果が文字とか数値だった場合に、補助情報を色々出すようにしてある。で、
irb(main):001:0> 'a' => a (97) irb(main):002:0> 99 => 99 (0x63 'c') irb(main):003:0> 2**25 => 33554432 (0x2000000 33M) irb(main):005:0* 0xf7e04000 + 0x41060 => 4158935136 (0xf7e45060 4158M)
などなど。最初の2つは文字と数字の変換結果がついでに出てて便利みたいな話。3つ目は 33M など、数字のだいたいの大きさが出ると便利という話。最後のはアドレス計算とかで特に最近こういうのよくやるので、 16 進数出てると便利。
それ以外にも色々歴史的にちょっとずつ足している機能があって、よく使うのだと、
irb(main):016:0> (99999*29999).cint => -1295097295 (0x..fb2ce6231)
31bit overflow してる時に、 C の整数だといくつ、ってのが意外とぱっとわからなかったりするので。 cuint もあるけど、まぁそっちはあまり使わない。
irb(main):010:0> asm("xchg eax, edx") 000000 92 >.< 000001 => nil irb(main):011:0> disasm("\x55\x57\x31\ff") /tmp/irb_disasm20140904-6135-1vk633j: file format binary Disassembly of section .data: 00000000 <.data>: 0: 55 push %ebp 1: 57 push %edi 2: 31 0c 66 xor %ecx,(%esi,%eiz,2) => nil