[#2023] Class Method の index — (Dezawa Shin-ichiro) <dezawa@...>

出沢です

13 messages 1997/02/02

[#2158] [Req] pack/unpack — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

14 messages 1997/02/18
[#2166] Re: [Req] pack/unpack — matz@... (Yukihiro Matsumoto) 1997/02/18

まつもと ゆきひろです.

[#2277] ruby 1.0-970228 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

16 messages 1997/02/28

[ruby-list:2164] b64encode.rb

From: sinara@...
Date: 1997-02-18 08:20:02 UTC
List: ruby-list #2164
原です。

[ruby-list:1015] でわたなべさんの紹介してくれた、
decode64 の逆、encode64 です。

------------------------------^ b64encode.rb
#!/usr/local/bin/ruby
def encode64(bin)
  encode = []
  pad = 0
  [bin].pack("u").each do |uu|
    len = (2 + (uu[0] - 32)* 4) / 3
    encode << uu[1, len].tr('` -_', 'AA-Za-z0-9+/')
    pad += uu.length - 2 - len
  end
  encode.join("") + "=" * (pad % 3)
end

def b64encode(bin, len = 60)
  encode64(bin).scan(/.{1,#{len}}/o) do
					print $&, "\n"
				      end
end 

b64encode(gets(nil))
------------------------------$ b64encode.rb


それから、前から気づいていたのですが、大きなファイルに
対して

encode = []
    encode << uu[0, len].tr('` -_', 'AA-Za-z0-9+/')

としているところを

encode = ""
    encode += uu[0, len].tr('` -_', 'AA-Za-z0-9+/')

とすると、メモリを使いきってスラッシングを始めてしまいます。

perl ではそんなことがないのですが、ruby は String#+= の
やり過ぎに弱いのではないでしょうか?

In This Thread