packに
>”w”、BER圧縮整数:1バイトあたり7ビットを使用して必要最小限のバイト数で「任意サイズの 0以上の整数」を表す数値表現。
ってのがあるので、これ使えば自分で計算する必要はない。
irb(main):001:0> File.open("testfile","wb"){|f|f.write([100**100].pack("w"))}
=> 95
irb(main):002:0> File.open("testfile","rb"){|f|f.read.unpack("w")}
=> [100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]